/** * Media Service * * Provides CRUD operations for media library entries. * ALL methods require teamId for strict team isolation. * * @module MediaService */ import type { Media, CreateMediaInput, UpdateMediaInput, MediaListOptions, MediaListResult, MediaTag } from '../media/types'; export declare class MediaService { /** * Get media item by ID (team-scoped) * * @param id - Media ID * @param userId - User ID for RLS context * @param teamId - Team ID for isolation * @returns Media or null if not found */ static getById(id: string, userId: string, teamId: string): Promise; /** * List media with pagination, filtering, and search (team-scoped) * * @param userId - User ID for RLS context * @param teamId - Team ID for isolation * @param options - List options (pagination, filtering, search, sort) * @returns Paginated media list result */ static list(userId: string, teamId: string, options?: MediaListOptions): Promise; /** * Find existing media by filename and fileSize (duplicate detection, team-scoped) * * @param userId - User ID for RLS context * @param teamId - Team ID for isolation * @param filename - Original filename * @param fileSize - File size in bytes * @returns Matching media items (same name+size = likely duplicate) */ static findDuplicates(userId: string, teamId: string, filename: string, fileSize: number): Promise; /** * Create a new media record * * @param userId - User ID (uploader) * @param teamId - Team ID for isolation * @param data - Media data * @returns Created media record */ static create(userId: string, teamId: string, data: CreateMediaInput): Promise; /** * Update media metadata (team-scoped) * * @param id - Media ID * @param userId - User ID for RLS context * @param data - Update data (title, alt, caption) * @param teamId - Team ID for isolation * @returns Updated media record or null if not found */ static update(id: string, userId: string, data: UpdateMediaInput, teamId: string): Promise; /** * Soft delete a media record (team-scoped) * * @param id - Media ID * @param userId - User ID for RLS context * @param teamId - Team ID for isolation * @returns True if deleted successfully */ static softDelete(id: string, userId: string, teamId: string): Promise; /** * Get all media tags for a team * * @param userId - User ID for RLS context * @param teamId - Team ID for isolation * @returns Array of media tags scoped to the team */ static getTags(userId: string, teamId: string): Promise; /** * Get tags for a specific media item * * @param mediaId - Media item ID * @param userId - User ID for RLS context * @param teamId - Team ID for isolation (media ownership verified before calling) * @returns Array of tags assigned to the media */ static getMediaTags(mediaId: string, userId: string, teamId: string): Promise; /** * Add a tag to a media item * * @param mediaId - Media item ID * @param tagId - Tag taxonomy ID * @param userId - User ID for RLS context * @returns True if tag was added */ static addTag(mediaId: string, tagId: string, userId: string): Promise; /** * Remove a tag from a media item * * @param mediaId - Media item ID * @param tagId - Tag taxonomy ID * @param userId - User ID for RLS context * @returns True if tag was removed */ static removeTag(mediaId: string, tagId: string, userId: string): Promise; /** * Set tags for a media item (replace all existing tags) * * @param mediaId - Media item ID * @param tagIds - Array of tag taxonomy IDs * @param userId - User ID for RLS context */ static setTags(mediaId: string, tagIds: string[], userId: string): Promise; /** * Create a new media tag (team-scoped) * * @param name - Tag display name * @param userId - User ID for RLS context * @param teamId - Team ID for isolation * @returns The created tag */ static createTag(name: string, userId: string, teamId: string): Promise; /** * Count media items (team-scoped) * * @param userId - User ID for RLS context * @param teamId - Team ID for isolation * @param options - Count options (type filter, status filter) * @returns Total count */ static count(userId: string, teamId: string, options?: { type?: 'image' | 'video' | 'all'; status?: string; }): Promise; } //# sourceMappingURL=media.service.d.ts.map