-
Notifications
You must be signed in to change notification settings - Fork 1
Editor #34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Editor #34
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This pull request represents a major architectural refactoring that transforms a standalone Discord bot into a full-stack Spring Boot application with a web-based admin dashboard. The changes include:
Changes:
- Migration from standalone JAR application to Spring Boot with embedded web server
- Addition of TypeScript/React admin dashboard with Discord OAuth2 authentication
- Introduction of service layer architecture with REST API endpoints
- Replacement of Logback XML configuration with Spring Boot application.properties
Reviewed changes
Copilot reviewed 102 out of 110 changed files in this pull request and generated 14 comments.
Show a summary per file
| File | Description |
|---|---|
| WerewolfApplication.java | Renamed from WerewolfHelper; now Spring Boot main class with @SpringBootApplication |
| application.properties | New Spring Boot configuration for MongoDB, sessions, and logging |
| Service layer (multiple files) | New service interfaces and implementations for game logic, Discord integration, players, roles, etc. |
| Controller layer (multiple files) | New REST API endpoints for game management, authentication, and sessions |
| Security layer (multiple files) | Spring Security configuration, OAuth2 authentication, session management |
| Database classes | Enhanced Session model with Spring Data annotations and audit logging |
| Dashboard (TypeScript/React) | Complete new frontend with authentication, real-time WebSocket updates, and game management UI |
| build.gradle.kts | Migration from Shadow JAR to Spring Boot Gradle plugin with new dependencies |
Files not reviewed (6)
- .idea/compiler.xml: Language not supported
- .idea/copilot.data.migration.agent.xml: Language not supported
- .idea/copilot.data.migration.ask.xml: Language not supported
- .idea/copilot.data.migration.edit.xml: Language not supported
- .idea/gradle.xml: Language not supported
- .idea/misc.xml: Language not supported
Comments suppressed due to low confidence (1)
src/main/java/dev/robothanzo/werewolf/database/documents/Session.java:145
- setDeadRoles exposes the internal representation stored in field deadRoles. The value may be modified through the variable deadRoles.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @Builder.Default | ||
| private boolean expelPK = false; | ||
| @Builder.Default | ||
| private List<Long> electors = new LinkedList<>(); |
Copilot
AI
Feb 2, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getElectors exposes the internal representation stored in field electors. The value may be modified after this call to getElectors.
getElectors exposes the internal representation stored in field electors. The value may be modified after this call to getElectors.
getElectors exposes the internal representation stored in field electors. The value may be modified after this call to getElectors.
getElectors exposes the internal representation stored in field electors. The value may be modified after this call to getElectors.
getElectors exposes the internal representation stored in field electors. The value may be modified after this call to getElectors.
getElectors exposes the internal representation stored in field electors. The value may be modified after this call to getElectors.
| @Builder.Default | ||
| private long stageEndTime = 0; | ||
| @Builder.Default | ||
| private Map<Integer, Candidate> candidates = new ConcurrentHashMap<>(); |
Copilot
AI
Feb 2, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getCandidates exposes the internal representation stored in field candidates. The value may be modified after this call to getCandidates.
getCandidates exposes the internal representation stored in field candidates. The value may be modified after this call to getCandidates.
getCandidates exposes the internal representation stored in field candidates. The value may be modified after this call to getCandidates.
| @Builder.Default | ||
| private List<Long> interruptVotes = new LinkedList<>(); | ||
| @Builder.Default | ||
| private List<Session.Player> order = new LinkedList<>(); |
Copilot
AI
Feb 2, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getOrder exposes the internal representation stored in field order. The value may be modified after this call to getOrder.
| private long channelId; | ||
| private Session session; | ||
| @Builder.Default | ||
| private List<Long> interruptVotes = new LinkedList<>(); |
Copilot
AI
Feb 2, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getInterruptVotes exposes the internal representation stored in field interruptVotes. The value may be modified after this call to getInterruptVotes.
getInterruptVotes exposes the internal representation stored in field interruptVotes. The value may be modified after this call to getInterruptVotes.
getInterruptVotes exposes the internal representation stored in field interruptVotes. The value may be modified after this call to getInterruptVotes.
| const [showSessionExpired, setShowSessionExpired] = useState(false); | ||
|
|
||
| // Helpers to update overlay | ||
| const setOverlayVisible = (visible: boolean) => setOverlayState(prev => ({...prev, visible})); |
Copilot
AI
Feb 2, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused variable setOverlayVisible.
|
@copilot please scan for any potential security vulnerabilities or loopholes or permission management issues |
|
@RobotHanzo I've opened a new pull request, #38, to work on those changes. Once the pull request is ready, I'll request review from you. |
No description provided.