1. Project Overview and Design — a shopping platform for members, sellers, and admins
ALLPICK is a shopping mall platform where members browse and order products, sellers register and manage products, and admins handle approvals, refunds, and inquiries. The same order or product data allows different actions depending on the role, so one wrongly exposed button can break a refund or seller-approval flow. I focused on admin and mypage flows where role permission, refund state, and seller status decide which operation is allowed.
My Contribution
Admin and mypage flows around refund state, seller status actions, request tokens, and backend guards.
Decision
Visible buttons and backend state transitions must share the same processable-state rule.
Verification
Code evidence shows frontend guards, token selection, and backend invalid-transition checks.
Limitation
The page shows implementation evidence, not measured performance or production traffic results.
Case 1. Enforcing refund transitions on the server, not only in buttons
- Failure state
- An admin can act on an invalid refund state or call the API directly to skip an intermediate step.
- Decision
- The UI exposes only state-valid actions, while the backend independently checks
ALLOWED_TRANSITIONS. The screen guard improves usability; the service layer owns integrity. - Code evidence
- Frontend
AdminRefundPage.jsxapproval/rejection guards and backendClaimServiceImpl.javatransition map andupdateStatus. - Verification
ClaimServiceImplTest.javacovers invalid transitions and attempts to change already completed claims.- Limitation
- This is not a production throughput claim. The verified outcome is preventing invalid refund-state changes.
Case 2. Role and token boundaries across admins, sellers, and buyers
- Failure state
- A screen role and request token can drift apart, sending a member token to an admin endpoint or exposing another role's action.
- Decision
- Select role-specific tokens in the frontend request layer, then enforce URL and service rules with Spring Security. UI visibility is never treated as authorization.
- Code evidence
- Frontend
api/index.js; backendSecurityConfig.java,BusinessException,ErrorCode, andGlobalExceptionHandler. - Verification
- Role-specific flows and API error responses were checked together so failures return consistent error codes rather than ad-hoc strings.
- Outcome
- The frontend provides role-aware behavior while the backend remains the final authority.
Case 3. Keeping seller approval actions aligned with seller state
- Failure state
- An already approved or rejected seller can receive approval actions again, or the API can process the same decision twice.
- Decision
- Render buttons by seller state and allow approval or rejection only from
PENDINGon the backend. - Code evidence
- Frontend
AdminMemberPage.jsx; backendAdminSellerApprovalServiceImpl.java. - Verification
AdminSellerApprovalServiceImplTest.javacovers pending-only lists, non-pending approval/rejection failures, and status-toggle restrictions.- Outcome
- ALLPICK is presented as a role-and-state consistency problem, not merely a CRUD storefront.
User request, seller confirmation, and admin final approval/rejection are separated.
Admin, seller, and buyer requests select different tokens before backend checks.
Visible admin actions change by PENDING, APPROVED, SUSPENDED, and REJECTED states.