기획이 3번 정도 휙휙 바뀌다 이제 하나로 정리가 되기 시작했다.
잡아둔 대략적인 프로젝트 구조에서 구체적인 api, 코드를 짜야할 시간이다.
효율적이고 효과적으로 남은 5일을 보내기 위해 전체적인 그림을 그리고 하나씩 쳐낼 것이다.
1. 와이어프레임을 토대로 기능 정리
2. 기능을 토대로 DB 작성하기
3. [API 명세] 작성하고, 고려해야 할 사항 정리하기.
4. [API 명세] 우선순위 설정 후, [코드] 구현하기
✅ [DB세팅] Mysql 연결
✅ [User] 지갑 연결 후 로그인 → 해당 정보 DB에 저장 후 JWT 발급
✅ [User] getUserInfo
🔲 [User] updateUserInfo
public interface UserService {
public void login(String userAddress);
public User getUserInfo(String userAddress);
public void updateUserInfo(String userAddress);
}
✅ [Mypage] getMypageInfo
✅ [Mypage] getMyBoardList
✅ [Mypage] getMyReplyList
→ 이 부분이 진짜 오래 걸렸다 ㅠㅠ 뿌려줘야 할 정보들이 정말 다채롭네..🙄
public interface MypageService {
public MypageResDTO getMyPageInfo(String userAddress);
public List<MyboardResDTO> getMyBoardList(String userAddress);
public List<MyreplyResDTO> getMyReplyList(String userAddress);
}
✅ [Board] createBoard
🔲 [Board] getTopRatedBoardList - QueryDsl 쓸까
✅ [Board] getBoardList
public interface BoardService {
public void createBoard(String userAddress);
public Board getBoard(String userAddress);
public List<Board> getBoardList(String userAddress);
public List<Board> getTopRatedBoardList(String userAddress);
}
✅ [Reply]
public interface ReplyService {
public void createReply(String contractAddress, Long boardId, String writerAddress, String content);
}
✅ [Like]
public interface LikeService {
public String likeOnOff(Long boardId, String userAddress);
}
✅ [Follow]
public interface FollowService {
public String followOnOff(String followeeAddress, String followerAddress);
}
✅ [Style] getNewbieStyle : 사용자의 최초 로그인 시, newbie 칭호를 발급합니다.
✅ [Style] getStyleList : 개인정보를 수정할때 고를 수 있는 칭호 리스트를 반환합니다.
public interface StyleService {
public void getNewbieStyle(String userAddress);
public List<String> getStyleList(String userAddress);
}
✅ [Level System] score에 따른 구간별 레벨 세팅
✅ [Level System] 글쓰기 +10, 댓글쓰기 +5
✅ [Level System] 좋아요 10개 받은 게시글 작성자 +500 (좋아요 취소가 있기에, 한번만 지급될 수 있도록 로직짜기)
public class Leveling {
public int calculateLevel(int score) {
if (score <= 1) {
return 1;
} else if (score <= 500) {
return 1 + (score - 1) / 50;
} else if (score <= 1000) {
return 11 + (score - 500) / 100;
} else if (score <= 2000) {
return 21 + (score - 1000) / 200;
} else if (score <= 4000) {
return 31 + (score - 2000) / 400;
} else if (score <= 8000) {
return 41 + (score - 4000) / 800;
} else if (score <= 16000) {
return 51 + (score - 8000) / 1600;
} else if (score <= 32000) {
return 61 + (score - 16000) / 3200;
} else if (score <= 64000) {
return 71 + (score - 32000) / 6400;
} else if (score <= 128000) {
return 81 + (score - 64000) / 12800;
} else {
return 91 + (score - 128000) / 25600;
}
}
}
5. 해커톤와서 추가적인 기획 요청이 들어왔습니다. 구현합시다.
✅ [Often Used App] mypage 에 들어가는 통계
→ NFT set, Defi set, Others 3가지 집합을 준비해서 받아온 json 중 app_name 부분을 비교해서 sorting 하고 제일 많이 사용한 dapp 을 top4를 클라이언트에 응답으로 넘겨줍니다.
🤖feature : Often Used App
- 값 분류 알고리즘
- 자료구조 중 set을 사용하자
- 분류된거 db에 저장
- 🚨발견한 문제점!!!!! 클릭할때마다 똑같은 값들이 전달받고 쌓이면서 새로운 값만 선별해서 추가해야 할텐데 그거에 관한 로직은 따로 고려해야할것같다. 예를 들어 트랜잭션 주소까지 저장해서 일치하는 게 없다면 저장을 한다던가!!!!!(할수있겠네 그러면 usedDapp 속성에 transaction 컬럼이 추가되어야 겠다)
- 주어진 값들 중 통계를 내서 프론트에 전달
6. 마지막으로 AWS EC2 배포 세팅(spring, mysql)을 합니다.
'블록체인' 카테고리의 다른 글
[Digital Signiture] 암호화의 원리🔐 (0) | 2023.05.24 |
---|---|
[Hackathon] NICO dApp Project (feat. Block Explorer, SBT, Community) (0) | 2023.05.22 |
[Hackathon] 삽질 일대기😰 (0) | 2023.05.11 |
[Hackathon] Web3 프로젝트 구조 설계에 관한 깊은 고찰🤔 (0) | 2023.05.09 |
[Hackathon] 📚프로젝트 구조화 + 우선순위 설정 (feat. NEAR Protocol) (0) | 2023.05.03 |