feat: Jellyfin/Plex auto-import via watch queue
Some checks failed
CI / Check / Test (push) Failing after 6m5s
Some checks failed
CI / Check / Test (push) Failing after 6m5s
Webhook ingestion from media servers — movies land in a pending watch queue, user rates and confirms to create diary entries. - domain: WatchEvent, WebhookToken models, MediaServerParser port - adapters: jellyfin + plex parser crates, SQLite + Postgres repos - application: ingest/confirm/dismiss/cleanup use cases, token mgmt - presentation: webhook endpoints (bearer + query param auth), watch queue + integrations settings HTML pages, OpenAPI docs - worker: WatchEventCleanupJob (daily, 30d retention) Movie resolution deferred to confirm — single canonical path through log_review for enrichment, poster fetch, federation.
This commit is contained in:
@@ -6,6 +6,7 @@ mod search;
|
||||
mod social;
|
||||
mod users;
|
||||
mod watchlist;
|
||||
mod webhook;
|
||||
|
||||
use axum::Router;
|
||||
use utoipa::{
|
||||
@@ -40,6 +41,7 @@ fn build() -> utoipa::openapi::OpenApi {
|
||||
api.merge(import::ImportDoc::openapi());
|
||||
api.merge(search::SearchDoc::openapi());
|
||||
api.merge(watchlist::WatchlistDoc::openapi());
|
||||
api.merge(webhook::WebhookDoc::openapi());
|
||||
#[cfg(feature = "federation")]
|
||||
api.merge(social::SocialDoc::openapi());
|
||||
SecurityAddon.modify(&mut api);
|
||||
|
||||
32
crates/presentation/src/openapi/webhook.rs
Normal file
32
crates/presentation/src/openapi/webhook.rs
Normal file
@@ -0,0 +1,32 @@
|
||||
use api_types::{
|
||||
ConfirmWatchEntry, ConfirmWatchRequest, ConfirmWatchResponse, DismissWatchRequest,
|
||||
DismissWatchResponse, GenerateTokenRequest, GenerateTokenResponse, WatchQueueEntryDto,
|
||||
WebhookTokenDto,
|
||||
};
|
||||
use utoipa::OpenApi;
|
||||
|
||||
#[derive(OpenApi)]
|
||||
#[openapi(
|
||||
paths(
|
||||
crate::handlers::webhook::post_jellyfin_webhook,
|
||||
crate::handlers::webhook::post_plex_webhook,
|
||||
crate::handlers::webhook::post_generate_webhook_token,
|
||||
crate::handlers::webhook::get_webhook_tokens,
|
||||
crate::handlers::webhook::delete_webhook_token,
|
||||
crate::handlers::webhook::get_watch_queue,
|
||||
crate::handlers::webhook::post_confirm_watch_events,
|
||||
crate::handlers::webhook::post_dismiss_watch_events,
|
||||
),
|
||||
components(schemas(
|
||||
GenerateTokenRequest,
|
||||
GenerateTokenResponse,
|
||||
WebhookTokenDto,
|
||||
WatchQueueEntryDto,
|
||||
ConfirmWatchRequest,
|
||||
ConfirmWatchEntry,
|
||||
ConfirmWatchResponse,
|
||||
DismissWatchRequest,
|
||||
DismissWatchResponse,
|
||||
))
|
||||
)]
|
||||
pub struct WebhookDoc;
|
||||
Reference in New Issue
Block a user