1. 사용자 관리
sequenceDiagram
actor User
participant Client
participant MetaMask
participant Server
User->>Client: 로그인 시도
Client->>MetaMask: MetaMask 연결 요청
MetaMask-->>Client: 연결 승인
alt 자동 로그인
Client->>Server: 자동 로그인 요청
Server-->>Client: 로그인 성공 (Access Token, Refresh Token 발급)
else 계정 확인
Client->>Server: 계정 존재 확인
alt 계정 존재
Server-->>Client: 계정 확인됨
Client->>Server: 로그인 요청
Server-->>Client: Access Token, Refresh Token 발급
else 계정 미존재
Server-->>Client: 계정 없음
Client->>Client: 회원가입 화면으로 이동
User->>Client: 프로필 사진, 닉네임 입력
Client->>Server: 회원가입 요청
Server-->>Client: 회원가입 완료 및 Access Token, Refresh Token 발급
end
end
Client-->>User: 로그인/회원가입 완료
Note over User,Server: Access Token 만료 시
Client->>Server: 리소스 요청 (만료된 Access Token 사용)
Server-->>Client: 401 Unauthorized
Client->>Server: Refresh Token으로 새 Access Token 요청
Server-->>Client: 새 Access Token 발급
Note over User,Server: 로그아웃 프로세스
User->>Client: 로그아웃 요청
Client->>Server: 로그아웃 요청 (Refresh Token 무효화)
Server-->>Client: 로그아웃 확인
Client->>Client: MetaMask 계정 정보 삭제
Client->>Client: Access Token, Refresh Token 삭제
Client-->>User: 로그아웃 완료
2. 경매
sequenceDiagram
actor U as 경매등록 사용자
participant S as Server
actor V as 투표자 (일반 사용자)
actor B as 입찰자 (경매 참가자)
S->>U: 1. 단기경매 후보 등록 시작 (24시간)
loop 1일차 00:00 ~ 24:00
U->>S: 단기경매 후보 등록
end
S->>V: 2. 투표 시작 (24시간)
loop 2일차 00:00 ~ 24:00
V->>S: 투표 진행
end
S->>S: 득표 상위 5개 후보 선정
loop
S->>B: 5. 경매 시작 (16:00 ~ 21:00) (1시간 단위로 15분씩)
loop 15분
alt 충분한 코인 보유
B->>S: 6. 가격 입찰 (코인 지불)
S->>S: 입찰가 갱신
alt 마지막 10초 동안 새 입찰 있음
S->>S: 7. 시간 10초로 리셋
else 마지막 10초 동안 새 입찰 없음
S->>S: 8. 경매 종료
end
else 코인 부족
S->>B: 입찰 실패
end
end
end
S->>B: 낙찰자 선정 및 NFT 전송
S->>U: 입찰 코인 전송
2-2. 장기 경매
sequenceDiagram
actor U as 경매등록 사용자
participant S as Server
actor B as 입찰자
U->>S: 1. 장기경매 등록 (경매 기간 선택 (1일/3일/7일))
S->>B: 경매 시작
loop 경매 기간
alt 충분한 코인 보유
B->>S: 2. 언제든지 가격 입찰
S->>S: 입찰가 갱신
alt 마지막 1분 동안 새 입찰 있음
S->>S: 3. 시간 1분으로 리셋
else 마지막 1분 동안 새 입찰 없음
S->>S: 4. 경매 종료
end
else 코인 부족
S->>B: 입찰 실패
end
end
S->>B: 5. 낙찰자 선정 및 NFT 전송
S->>U: 입찰 코인 전송
3. NFT 제작
sequenceDiagram
actor User
participant Client
participant AIServer as AI Server
participant Server
participant MetaMask
alt AI로 이미지 새로 생성
User->>Client: 스케치 그리기 및 프롬프트 입력
Client->>AIServer: 스케치와 프롬프트 전송
AIServer->>AIServer: AI로 에셋 생성
else 직접 이미지 선택
User->>Client: 이미지 선택
Client->>AIServer: 선택한 이미지 전송
AIServer->>AIServer: 이미지 편집
end
AIServer->>Server: 생성된 에셋 전송
Server->>Server: 에셋 저장
Server-->>Client: 저장된 에셋 전송
User->>Client: 프레임 꾸미기
Client->>Client: 프레임 생성
Client->>Server: 프레임 NFT화 요청
Server->>MetaMask: NFT 생성 트랜잭션 요청
MetaMask-->>User: 트랜잭션 확인 요청
User-->>MetaMask: 트랜잭션 승인
MetaMask->>MetaMask: NFT 생성
MetaMask-->>User: NFT 생성 완료 알림
4. 코인 거래
sequenceDiagram
actor 유저
participant Server
participant MetaMask
# participant 은행
유저->>Server: 코인 구매 요청
Server->>Server: 결제 확인
alt 결제 성공
Server->>MetaMask: MetaMask에 코인 요청
MetaMask-->>Server: 코인 지급 완료
Server-->>유저: 구매 완료 알림
else 결제 실패
Server-->>유저: 결제 실패 알림
유저->>Server: 결제 재시도 또는 취소
end
유저->>Server: 코인 환급 요청
Server->>MetaMask: MetaMask에 코인 환수 트랜잭션 요청
MetaMask-->>유저: 코인 환수 트랜잭션 요청
유저-->>MetaMask: 코인 환수 트랜잭션 승인
MetaMask-->>Server: 코인 환수 완료
Server-->>유저: 현금 지급
5. NFT 거래
5-1. NFT 판매
sequenceDiagram
actor User
participant Marketplace as Server
participant MetaMask
Note over User,MetaMask: MetaMask 계정이 이미 연결된 상태
User->>Marketplace: NFT(프레임) 판매 요청
User->>Marketplace: 프레임 업로드 및 판매 정보 입력 (가격 등)
Marketplace->>MetaMask: 판매 트랜잭션 서명 요청
MetaMask-->>User: 트랜잭션 확인 요청
User-->>MetaMask: 트랜잭션 승인
MetaMask-->>Marketplace: 서명된 트랜잭션 전송
Marketplace->>Marketplace: NFT 판매 목록에 등록
Marketplace-->>User: NFT 판매 등록 완료 확인
5-2. NFT 구매
sequenceDiagram
actor User
participant Marketplace as Server
participant MetaMask
Note over User,MetaMask: MetaMask 계정이 이미 연결된 상태
User->>Marketplace: NFT(프레임) 구매 요청
Marketplace->>MetaMask: 구매 가능 코인 잔액 확인
MetaMask-->>Marketplace: 코인 잔액 정보 전송
alt 충분한 코인 잔액
Marketplace->>MetaMask: 구매 트랜잭션 서명 요청
MetaMask-->>User: 트랜잭션 확인 요청
User-->>MetaMask: 트랜잭션 승인
MetaMask-->>Marketplace: 서명된 트랜잭션 전송
Marketplace->>Marketplace: NFT 소유권 이전
Marketplace-->>User: NFT 구매 완료 확인
else 불충분한 코인 잔액
Marketplace-->>User: 구매 불가 메시지 (잔액 부족)
end
6. 에셋 거래
sequenceDiagram
actor C as 제작자
actor U as 구매자
participant S as Server
participant M as MetaMask
C->>S: 1. 에셋 등록 (가격 지정)
U->>S: 2. 에셋 검색 및 선택
U->>S: 3. 에셋 구매 요청
S->>M: 4. 코인 잔액 확인 요청
M-->>S: 5. 코인 잔액 정보 전송
alt 충분한 코인
S->>M: 6. 코인 전송 요청 (구매자 -> 시스템)
M-->>U: 7. 거래 승인 요청
U-->>M: 8. 거래 승인
M->>S: 9. 코인 전송 완료
S->>U: 10. 에셋 전달 및 권한 부여
S->>M: 11. 코인 전송 요청 (시스템 -> 제작자)
M->>C: 12. 결제 금액 전달
S-->>U: 13. 구매 완료 알림
S-->>C: 14. 판매 완료 알림
else 코인 부족
S-->>U: 6. 결제 거부 (잔액 부족)
S-->>U: 7. 구매 실패 알림
end