feat(inquiry): backend foundation for sirsoft-inquiry module (Plan 1/4)#42
Open
RYANHEO86 wants to merge 81 commits into
Open
feat(inquiry): backend foundation for sirsoft-inquiry module (Plan 1/4)#42RYANHEO86 wants to merge 81 commits into
RYANHEO86 wants to merge 81 commits into
Conversation
별도 모듈 sirsoft-inquiry v1 설계 — 1:N 운영자 수주형 제작의뢰의 접수·견적·진행·완료 전체 라이프사이클을 한 도메인 모듈에 담는다. 표준 4단계 상태머신, 구조화된 견적(version immutable), sirsoft-ecommerce 결제 선택적 의존, 채팅형 메시지 스레드, 인앱+이메일 알림 포함. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Plan 1/4 of the sirsoft-inquiry rollout — 26 TDD tasks covering module scaffold, migrations, models, enums, repositories, state machine, attachment storage, and policy. API controllers, frontend, quote/payment bridge, and notifications are scheduled for Plans 2-4. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…eview Pre-execution sanity check revealed that this project's module system differs from the assumptions baked into Plan 1: - BaseModuleServiceProvider::register/boot already handle migrations, translations, and repository binding. Subclasses only declare arrays. - Module migrations run via ModuleManager (php artisan module:install / module:activate), NOT via `php artisan migrate`. - Translations auto-load from src/lang. Updated Pre-check, Task 2 (ServiceProvider skeleton), Task 3 (config merge in register), and added Appendix A/B so implementer and reviewers share a single source of truth on these patterns. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t/offline/complete/cancel) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tion) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…lan 2/4) Plan 2/4 — 21 TDD tasks covering Public REST API (9 routes), 3 frontend composites (StatusBar / Card / MessageThread), and 3 user-facing layouts (index / new / show + cancel modal partial). Quote accept/pay, admin screens, and notifications are scheduled for Plans 3-4. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…cel) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ommerce tables Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…4 — final) Plan 4/4 — 10 TDD tasks covering 7 Notification classes (extending App\Notifications\BaseNotification with HookManager filter channels), 2 event-subscribing Listeners (status transitions + new messages), channel filter registration, orphan attachment cleanup command with hourly schedule, and Notification::fake() E2E verification tests. v1 lifecycle becomes complete with this plan. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a navigation link to /inquiry in both the desktop Header user dropdown (after Wishlist) and the mobile drawer's user menu, so logged-in users can reach their inquiry list from any page. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The plan-generated routes used "auth: true" and layouts declared "permissions: [auth]", but the actual route schema uses "auth_required" and "permissions" should remain empty for auth-only pages — auth is enforced at the route level. Without this fix, all /inquiry pages returned 403 "필요 권한: auth". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- _overlay_header.json (home), _subpage_header.json (theme): set
"제작의뢰" menu item href to "/inquiry"
- _hero.json: set "세팅 제작의뢰" CTA card href to "/inquiry/new"
(also reconnects "테마 둘러보기" to "/board/theme")
- inquiry/{index,new,show}.json: hide default header/footer, wrap content
in .aict-home with subpage_header + aict_footer partials — same pattern
as themes_show, so /inquiry/* now shares the same chrome as theme pages.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… /inquiry pages Matches the board/themes page-hero pattern from ThemeListSection. Each inquiry page gets contextual copy: - index: "My Inquiries" / "내 제작의뢰" + summary lead - new: "New Inquiry" / "새 제작의뢰" + guidance lead, breadcrumb back to list - show: "Inquiry Detail" / dynamic title from inquiry.data.title, breadcrumb back to list, lead shows category/budget/due-date when present Removes the redundant H1 from index/new bodies since the hero now carries the page title. The "새 의뢰 작성" CTA on index moves to right-aligned. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
inquiries/inquiry_quotes/inquiry_quote_items/inquiry_messages/inquiry_attachments) + 4 enum + 3 exception + 2 event + 5 Eloquent model + 4 repository pair + 시스템 메시지 lang(ko/en).InquiryStateMachine(7 합법 전이 + 2 불법 거부, 트랜잭션 안에서 시스템 메시지 자동 삽입 +InquiryStatusTransitioned이벤트 dispatch),InquiryAttachmentStorage(mime/사이즈 정책 검증),InquiryPolicy(권한 매트릭스).BaseModuleServiceProvider상속,module:install/module:activate흐름.php artisan migrate와 분리되어ModuleManager::runMigrations()가 처리.Documentation
docs/superpowers/specs/2026-05-20-제작의뢰-design.mddocs/superpowers/plans/2026-05-21-제작의뢰-backend-foundation.mdTest Plan
php artisan test --filter="Modules\\\\Inquiry"— 31 tests, 78 assertions all passModuleBootstrapTest× 3 — ServiceProvider 해석·config 머지·module identifierEnumsTest× 3 — 4 enum 값 검증 + InvalidStateTransitionException 메시지ModelRelationshipTest× 8 — Eloquent 관계 + 4 Repository CRUD/issue/expire/append/appendSystemStateMachineTest× 8 — issue_quote/revoke/reject/accept_and_pay/mark_paid_offline/mark_completed/cancel + 2 불법 전이 거부AttachmentStorageTest× 3 — mime 화이트리스트·사이즈 상한·저장PolicyTest× 5 — owner/operator/non-owner 권한 매트릭스 (프로젝트의 자체 Role/Permission 시스템과 호환)php artisan module:install sirsoft-inquiry동작 확인Follow-ups (this PR 범위 밖)
/inquiry/*사용자 화면InquiryPaymentBridge(sirsoft-ecommerce 연동) + 어드민 화면🤖 Generated with Claude Code