57 lines
2.0 KiB
Markdown
57 lines
2.0 KiB
Markdown
# 28. Create Feed Data Models and Types
|
|
|
|
meta:
|
|
id: podcast-tui-app-28
|
|
feature: podcast-tui-app
|
|
priority: P0
|
|
depends_on: [27]
|
|
tags: [types, data-models, solidjs, typescript]
|
|
|
|
objective:
|
|
- Define TypeScript interfaces for all podcast-related data
|
|
- Create models for feeds, episodes, sources
|
|
- Set up type definitions for sync functionality
|
|
|
|
deliverables:
|
|
- `src/types/podcast.ts` with core types
|
|
- `src/types/episode.ts` with episode types
|
|
- `src/types/source.ts` with source types
|
|
- `src/types/feed.ts` with feed types
|
|
|
|
steps:
|
|
- Create `src/types/podcast.ts`:
|
|
- `Podcast` interface (id, title, description, coverUrl, feedUrl, lastUpdated)
|
|
- `PodcastWithEpisodes` interface (podcast + episodes array)
|
|
- Create `src/types/episode.ts`:
|
|
- `Episode` interface (id, title, description, audioUrl, duration, pubDate, episodeNumber)
|
|
- `EpisodeStatus` enum (playing, paused, completed, not_started)
|
|
- `Progress` interface (episodeId, position, duration, timestamp)
|
|
- Create `src/types/source.ts`:
|
|
- `PodcastSource` interface (id, name, baseUrl, type, apiKey, enabled)
|
|
- `SourceType` enum (rss, api, custom)
|
|
- `SearchQuery` interface (query, sourceIds, filters)
|
|
- Create `src/types/feed.ts`:
|
|
- `Feed` interface (id, podcast, episodes[], isPublic, sourceId, lastUpdated)
|
|
- `FeedItem` interface (represents a single episode in a feed)
|
|
- `FeedFilter` interface (public, private, sourceId)
|
|
|
|
tests:
|
|
- Unit: Verify all interfaces compile correctly
|
|
- Unit: Test enum values are correct
|
|
- Integration: Test type definitions match expected data structures
|
|
|
|
acceptance_criteria:
|
|
- All TypeScript interfaces compile without errors
|
|
- Types are exported for use across the application
|
|
- Type definitions cover all podcast-related data
|
|
|
|
validation:
|
|
- Run `bun run build` to verify TypeScript compilation
|
|
- Check `src/types/` directory contains all required files
|
|
|
|
notes:
|
|
- Use strict TypeScript mode
|
|
- Include JSDoc comments for complex types
|
|
- Keep types simple and focused
|
|
- Ensure types are compatible with sync JSON/XML formats
|