ANTOOZA(개미투자) - Clean Architecture 기반 커머스·커뮤니티 플랫폼 (.NET 10.0)
Admin/ → Razor Pages 관리자 패널 (https://localhost:5000)
Web.Api/ → RESTful Minimal API (https://localhost:4000)
Application/ → CQRS Handler (사내 디스패처)
└── Features/
├── Api/ → Auth(+Social), Banner, Channel(비활성), Chat, Document, Faq, Forum, Member, MyPage, Note, Notification, Payment, Popup, Stocks, Store, Studio(비활성)
└── Admin/ → Banner, Cache, Channel, Document, Faq, Forum, Member, MemberGrade, Payment, Popup, ReferenceData, Store
Domain/ → Entity, ValueObject
└── Entities/
├── Common/ → Config, Document, etc.
├── Members/ → Member, Channel(비활성), RefreshToken, MemberOAuthToken
├── Wallets/ → Wallet, WalletBalance(rowversion), WalletTransaction
├── Stocks/ → Stock, StockDailyPrice, MarketHoliday (M1 신규)
├── Chat/ → ChatRoomConfig, ChatBan (룸 기반 채팅)
├── Store/ → Product, Order, CouponCode, GameSettlement 등
├── Notes/ → Note (쪽지)
├── Notifications/ → Notification (알림)
├── Payments/ → PaymentOrder, Toss(Confirm/Cancel/Log), PaymentReconcileLog
└── Forum/ → Board, Post, Comment
Infrastructure/ → DB, Auth, Storage, Email
├── Authentication/ → JWT, Identity, GoogleOAuth, NaverAuthProvider, KakaoAuthProvider
├── Cache/ → Redis
├── Hubs/ → AppHub (전역 실시간 — 알림/쪽지)
├── Chat/ → Redis 메시지 스토어/접속 추적 (ChatHub 는 Web.Api/Hubs)
├── Notification/ → NotificationService (쪽지/알림 발송)
├── StockData/ → 금융위(data.go.kr) 종목마스터·일별시세 수집 배치 (M1 신규)
├── YouTube/ → [비활성 — Features:Channel 플래그] YouTubeApiService, PubSub, LiveChat
├── Payment/ → TossPaymentService (PG 결제)
├── Forum/ → 게시판 비즈니스 로직
├── Messaging/ → Email (SMTP, MimeKit)
├── Persistence/ → AppDbContext, IdentityDbContext, Migrations
├── Storage/ → 파일 업로드
└── Extensions/ → 확장 메서드
SharedKernel/ → AppSettings, Result Pattern
Database/ → SQL 배포 스크립트 (deploy-app.sql, deploy-identity.sql, deploy-missing.sql)
Tests/ → Application.Tests (MSTest + LocalDB antooza_test — 결제/지갑/채팅/종목/소셜)
제거된 도메인(2026-07-03 Phase B): Donation/Settlement/Crew/Developers(공개 v1 API) — 전부 삭제됨. Channel/YouTube 는
Features:Channel플래그로 비활성(코드 보존).
Auth(social-login/disconnect 포함), Banner, Channel(플래그 게이트), Chat, Config, Document, Faq, Forum, MyPage, Note, Notification, Payment, Popup, Stocks, Store, Studio(플래그 게이트), Wallet, YouTube(플래그 게이트)
memberID, userID (camelCase + 대문자 ID){} 사용|| 대신)Application/Messaging/Sender.cs/hubs/app) — 전역 (접속자 추적, 알림, 쪽지)/hubs/chat) — 룸 기반 채팅: JoinRoom(roomKey) = main | stock:{code} (게스트 읽기 허용, 전송은 인증)/api/auth/social-login, 자동 계정연결 금지, disconnect 웹훅)StockData:Enabled + ServiceKey 필요)AddApplication() → 리플렉션 스캔으로 전체 Handler(Scoped) 등록 + ISender/IMediator 디스패처(Sender) 등록AddApiInfrastructure() → API 전용 (JWT Bearer + 모든 서비스)AddAdminInfrastructure() → Admin 전용 (Identity + 모든 서비스)AddPresentation() → Swagger, ExceptionHandler# Solution build
dotnet build Backend.slnx
# API 실행
dotnet run --project Web.Api
# Admin 실행
dotnet run --project Admin
# Migration
dotnet ef migrations add <Name> --project Infrastructure --startup-project Admin --context AppDbContext
dotnet ef database update --project Infrastructure --startup-project Admin --context AppDbContext
Result<T> / Error (SharedKernel/Results/)IEndpoint 인터페이스 → MapEndpoint() 구현Application/Features/{Domain}/{Action}/Command.cs, Handler.cs, Response.cs) => { 한 줄에 붙여 작성 (개행 금지)type="button" 필수Send.cs, History.cs)block__element--modifiermigrationBuilder.Sql(...) 내부 한글 문자열 리터럴은 반드시 N'...' 형식 사용 (non-Unicode 파싱으로 ?? 저장 방지)PgCharged + Deposit (Toss PG 충전). 상점 구매 전용 (SpendPolicy.StoreOrderSpendOrder = 캐시만)Reward + Airdrop (가입/출석/글/댓글 보상 + 모의투자 운용). 기존 "코인"에서 최종 개명(2026-07-05). 상점 구매 불가 — 활동·모의투자 폐쇄 루프Donation/StoreRevenue enum 값은 원장 호환용으로만 보존([비활성] 주석)@tosspayments/tosspayments-sdk, Frontend)Infrastructure/Payment/TossPaymentService.cs (V2 REST — api.tosspayments.com)enc:v{n}:... 포맷)/api/payments/orders · /confirm · /cancel (인증) · /webhook (Anonymous)AI 지시: DB 테이블/컬럼/관계 관련 작업 시 먼저 아래 스키마 파일을 Read로 확인할 것.