Implement Phase 3A playlist management
This commit is contained in:
+43
-2
@@ -6,24 +6,55 @@ const {
|
||||
const { createAssetRouter } = require("./assets/routes");
|
||||
const { createMediaRouter } = require("./assets/media-routes");
|
||||
const { createAssetService } = require("./assets/service");
|
||||
const {
|
||||
createPlaylistRouter,
|
||||
createPlaylistService,
|
||||
} = require("./playlists");
|
||||
const { createSettingsRouter } = require("./settings/routes");
|
||||
const { createSettingsService } = require("./settings/service");
|
||||
|
||||
function safeNotifier(notifier, logger) {
|
||||
const warn = (error) => {
|
||||
try {
|
||||
logger?.warn?.("Playlist invalidation notification failed", error);
|
||||
} catch {
|
||||
// A best-effort notification or warning must not undo a database commit.
|
||||
}
|
||||
};
|
||||
return (event) => {
|
||||
try {
|
||||
const result = notifier(event);
|
||||
result?.catch?.(warn);
|
||||
} catch (error) {
|
||||
warn(error);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function createApp({
|
||||
config,
|
||||
database,
|
||||
imageProcessor,
|
||||
lifecycle,
|
||||
logger = console,
|
||||
migrations,
|
||||
now = Date.now,
|
||||
onPlaylistsChanged = () => {},
|
||||
storage,
|
||||
}) {
|
||||
const app = express();
|
||||
const notifyPlaylistsChanged = safeNotifier(onPlaylistsChanged, logger);
|
||||
const settingsService = createSettingsService(database);
|
||||
const assetService = createAssetService({
|
||||
database,
|
||||
imageProcessor,
|
||||
storage,
|
||||
});
|
||||
const playlistService = createPlaylistService({
|
||||
database,
|
||||
now,
|
||||
onChanged: notifyPlaylistsChanged,
|
||||
});
|
||||
|
||||
app.disable("x-powered-by");
|
||||
app.set("trust proxy", config.trustProxy);
|
||||
@@ -51,11 +82,21 @@ function createApp({
|
||||
"/api/status",
|
||||
createDetailedHealthRouter(detailedHealthRouterOptions),
|
||||
);
|
||||
app.use("/api/settings", createSettingsRouter(settingsService));
|
||||
app.use(
|
||||
"/api/settings",
|
||||
createSettingsRouter(settingsService, {
|
||||
onPlaylistsChanged: notifyPlaylistsChanged,
|
||||
}),
|
||||
);
|
||||
app.use(
|
||||
"/api/assets",
|
||||
createAssetRouter({ assetService, processingConfig: config.processing }),
|
||||
createAssetRouter({
|
||||
assetService,
|
||||
onPlaylistsChanged: notifyPlaylistsChanged,
|
||||
processingConfig: config.processing,
|
||||
}),
|
||||
);
|
||||
app.use("/api/playlists", createPlaylistRouter(playlistService));
|
||||
app.use("/media", createMediaRouter(assetService));
|
||||
|
||||
app.use((request, response) => {
|
||||
|
||||
Reference in New Issue
Block a user