From c4bed3f050f94bc541d551cbaf6fb2314ad547d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Kr=C3=BChlmann?= Date: Tue, 10 Feb 2026 13:44:21 +0100 Subject: [PATCH] Add todos --- .../java/dev/kruhlmann/imgfloat/config/SchemaMigration.java | 2 ++ .../dev/kruhlmann/imgfloat/controller/ChannelApiController.java | 2 ++ .../dev/kruhlmann/imgfloat/service/ChannelDirectoryService.java | 2 ++ .../kruhlmann/imgfloat/service/MarketplaceScriptSeedLoader.java | 2 ++ .../dev/kruhlmann/imgfloat/service/SevenTvEmoteService.java | 2 ++ .../java/dev/kruhlmann/imgfloat/service/TwitchEmoteService.java | 2 ++ src/main/resources/static/js/admin/console.js | 1 + src/main/resources/static/js/broadcast/renderer.js | 1 + src/main/resources/static/js/broadcast/script-worker.js | 1 + src/main/resources/static/js/customAssets.js | 1 + src/main/resources/static/js/dashboard.js | 1 + src/main/resources/static/js/settings.js | 1 + 12 files changed, 18 insertions(+) diff --git a/src/main/java/dev/kruhlmann/imgfloat/config/SchemaMigration.java b/src/main/java/dev/kruhlmann/imgfloat/config/SchemaMigration.java index d2bdab9..1327d03 100644 --- a/src/main/java/dev/kruhlmann/imgfloat/config/SchemaMigration.java +++ b/src/main/java/dev/kruhlmann/imgfloat/config/SchemaMigration.java @@ -12,6 +12,8 @@ import org.springframework.stereotype.Component; @Component public class SchemaMigration implements ApplicationRunner { + // TODO: Code smell Runtime schema migration logic duplicates Flyway responsibilities and is difficult to reason about/test. + private static final Logger logger = LoggerFactory.getLogger(SchemaMigration.class); private final JdbcTemplate jdbcTemplate; diff --git a/src/main/java/dev/kruhlmann/imgfloat/controller/ChannelApiController.java b/src/main/java/dev/kruhlmann/imgfloat/controller/ChannelApiController.java index d412ad1..c2c699b 100644 --- a/src/main/java/dev/kruhlmann/imgfloat/controller/ChannelApiController.java +++ b/src/main/java/dev/kruhlmann/imgfloat/controller/ChannelApiController.java @@ -56,6 +56,8 @@ import org.springframework.web.server.ResponseStatusException; @SecurityRequirement(name = "twitchOAuth") public class ChannelApiController { + // TODO: Code smell Controller surface area is very large, suggesting too many endpoint responsibilities in one type. + private static final Logger LOG = LoggerFactory.getLogger(ChannelApiController.class); private final ChannelDirectoryService channelDirectoryService; private final OAuth2AuthorizedClientService authorizedClientService; diff --git a/src/main/java/dev/kruhlmann/imgfloat/service/ChannelDirectoryService.java b/src/main/java/dev/kruhlmann/imgfloat/service/ChannelDirectoryService.java index 91b855b..633fa94 100644 --- a/src/main/java/dev/kruhlmann/imgfloat/service/ChannelDirectoryService.java +++ b/src/main/java/dev/kruhlmann/imgfloat/service/ChannelDirectoryService.java @@ -60,6 +60,7 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; @Service +// TODO: Code smell God class; this service mixes admin management, asset CRUD, media processing, websocket publishing, and marketplace concerns. public class ChannelDirectoryService { private static final Logger logger = LoggerFactory.getLogger(ChannelDirectoryService.class); @@ -74,6 +75,7 @@ public class ChannelDirectoryService { AssetType.OTHER ); + // TODO: Code smell Constructor has too many dependencies, indicating high coupling and too many responsibilities. private final ChannelRepository channelRepository; private final AssetRepository assetRepository; private final VisualAssetRepository visualAssetRepository; diff --git a/src/main/java/dev/kruhlmann/imgfloat/service/MarketplaceScriptSeedLoader.java b/src/main/java/dev/kruhlmann/imgfloat/service/MarketplaceScriptSeedLoader.java index 2ec2251..e113a3b 100644 --- a/src/main/java/dev/kruhlmann/imgfloat/service/MarketplaceScriptSeedLoader.java +++ b/src/main/java/dev/kruhlmann/imgfloat/service/MarketplaceScriptSeedLoader.java @@ -22,6 +22,8 @@ import org.springframework.stereotype.Component; @Component public class MarketplaceScriptSeedLoader { + // TODO: Code smell Large parser/loader with many branching paths; consider decomposing into smaller collaborators. + private static final Logger logger = LoggerFactory.getLogger(MarketplaceScriptSeedLoader.class); private static final String METADATA_FILENAME = "metadata.json"; private static final String SOURCE_FILENAME = "source.js"; diff --git a/src/main/java/dev/kruhlmann/imgfloat/service/SevenTvEmoteService.java b/src/main/java/dev/kruhlmann/imgfloat/service/SevenTvEmoteService.java index 5c8e6c8..380fdf9 100644 --- a/src/main/java/dev/kruhlmann/imgfloat/service/SevenTvEmoteService.java +++ b/src/main/java/dev/kruhlmann/imgfloat/service/SevenTvEmoteService.java @@ -30,6 +30,8 @@ import org.springframework.web.util.UriComponentsBuilder; @Service public class SevenTvEmoteService { + // TODO: Code smell Service handles transport, parsing, and storage concerns together instead of focused components. + private static final Logger LOG = LoggerFactory.getLogger(SevenTvEmoteService.class); private static final String USERS_URL = "https://api.twitch.tv/helix/users"; private static final String USER_EMOTE_URL = "https://7tv.io/v3/users/twitch/"; diff --git a/src/main/java/dev/kruhlmann/imgfloat/service/TwitchEmoteService.java b/src/main/java/dev/kruhlmann/imgfloat/service/TwitchEmoteService.java index 31956a7..c96090e 100644 --- a/src/main/java/dev/kruhlmann/imgfloat/service/TwitchEmoteService.java +++ b/src/main/java/dev/kruhlmann/imgfloat/service/TwitchEmoteService.java @@ -34,6 +34,8 @@ import org.springframework.web.util.UriComponentsBuilder; @Service public class TwitchEmoteService { + // TODO: Code smell Service bundles API client calls, caching, disk persistence, and async scheduling in one class. + private static final Logger LOG = LoggerFactory.getLogger(TwitchEmoteService.class); private static final String GLOBAL_EMOTE_URL = "https://api.twitch.tv/helix/chat/emotes/global"; private static final String CHANNEL_EMOTE_URL = "https://api.twitch.tv/helix/chat/emotes"; diff --git a/src/main/resources/static/js/admin/console.js b/src/main/resources/static/js/admin/console.js index c0cdcdc..f6f0985 100644 --- a/src/main/resources/static/js/admin/console.js +++ b/src/main/resources/static/js/admin/console.js @@ -1,3 +1,4 @@ +// TODO: Code smell Monolithic admin console logic centralizes rendering, transport, and interaction handling in one file. import { isAudioAsset } from "../media/audio.js"; import { isApngAsset, isCodeAsset, isGifAsset, isModelAsset, isVideoAsset, isVideoElement } from "../broadcast/assetKinds.js"; import { createModelManager } from "../media/modelManager.js"; diff --git a/src/main/resources/static/js/broadcast/renderer.js b/src/main/resources/static/js/broadcast/renderer.js index f91b879..cee90d0 100644 --- a/src/main/resources/static/js/broadcast/renderer.js +++ b/src/main/resources/static/js/broadcast/renderer.js @@ -8,6 +8,7 @@ import { createMediaManager } from "./mediaManager.js"; import { createModelManager } from "../media/modelManager.js"; export class BroadcastRenderer { + // TODO: Code smell Renderer class accumulates networking, state management, media orchestration, and rendering responsibilities. constructor({ canvas, scriptLayer, broadcaster, showToast }) { this.canvas = canvas; this.ctx = canvas.getContext("2d"); diff --git a/src/main/resources/static/js/broadcast/script-worker.js b/src/main/resources/static/js/broadcast/script-worker.js index 0548c15..f37429c 100644 --- a/src/main/resources/static/js/broadcast/script-worker.js +++ b/src/main/resources/static/js/broadcast/script-worker.js @@ -330,6 +330,7 @@ function createScriptHandlers(source, context, state, sourceLabel = "") { return factory(context, state, module, exports); } +// TODO: Code smell Worker command handling relies on a long conditional dispatcher that is hard to maintain. self.addEventListener("message", (event) => { const { type, payload } = event.data || {}; if (type === "init") { diff --git a/src/main/resources/static/js/customAssets.js b/src/main/resources/static/js/customAssets.js index de22c09..432a436 100644 --- a/src/main/resources/static/js/customAssets.js +++ b/src/main/resources/static/js/customAssets.js @@ -1,3 +1,4 @@ +// TODO: Code smell Large modal module with extensive mutable state and mixed UI/network responsibilities. export function createCustomAssetModal({ broadcaster, adminChannels = [], diff --git a/src/main/resources/static/js/dashboard.js b/src/main/resources/static/js/dashboard.js index e4c2d21..02a0cc0 100644 --- a/src/main/resources/static/js/dashboard.js +++ b/src/main/resources/static/js/dashboard.js @@ -1,3 +1,4 @@ +// TODO: Code smell Dashboard script uses broad shared state and imperative DOM updates instead of focused components. const elements = { adminList: document.getElementById("admin-list"), suggestionList: document.getElementById("admin-suggestions"), diff --git a/src/main/resources/static/js/settings.js b/src/main/resources/static/js/settings.js index 8d194da..92f1b94 100644 --- a/src/main/resources/static/js/settings.js +++ b/src/main/resources/static/js/settings.js @@ -1,3 +1,4 @@ +// TODO: Code smell Script performs global DOM lookups/state mutation at module load, increasing coupling and test difficulty. const formElement = document.getElementById("settings-form"); const submitButtonElement = document.getElementById("settings-submit-button"); const canvasFpsElement = document.getElementById("canvas-fps");