Giter Site home page Giter Site logo

pnmp's Introduction

pnmp

스크린샷 2023-01-13 오후 11 56 12

🏓 프로젝트 소개

프로젝트 기능 및 시연

실시간 Pong 대회를 위한 웹사이트를 만드는 팀 프로젝트입니다.

  • 42 OAuth와 github OAuth를 통해 로그인을 할 수 있으며, 자신의 프로필을 수정할 수 있습니다. 또한 Google OTP 를 활용한 이중 인증도 가능합니다.
login_profile.mov
  • 게임은 매칭 메이킹 시스템을 통한 자동 매칭, 혹은 게임 초대를 통해 다른 유저와 Pong 게임을 진행할 수 있습니다.
pong-game.mp4
  • 일대일 채팅과 다대다 채팅이 가능합니다. 다대다 채팅을 할 수 있는 채널은 공개 여부와 비밀번호를 설정할 수 있습니다.
chat_channel.mp4
  • 다른 유저를 차단할 수 있습니다. 차단하면 상대의 채팅을 받지 않을 수 있습니다.
block.mp4
  • 다른 유저에게 친구요청을 보낼 수 있습니다. 상대가 요청을 수락해 친구가 된다면 친구가 온라인인지 오프라인인지 게임중인지 확인할 수 있습니다.
friend.mov

프로젝트 기간

2022.10 ~ 2022.12 (3개월)

프로젝트 멤버

hyeonsok, minsikim, jihkwon, jwoo

기술 스택 및 개발 도구

  • docker, Nginx, PostgreSQL, NestJS, Next.js, Node.js, TypeScript, Socket.IO
  • GitHub, Swagger, pgAdmin, MUI
  • Notion, Slack, Figma



🛠 프로젝트 설계

도커 컨테이너 구조도

ts

DB 스키마

transcendence-ERD

API 설계

API 엔드 포인트 설계



⚙️ 프로젝트 구동방법

1. 프로젝트 레포를 클론합니다.

git clone https://github.com/ping-neo-meo-pong/pnmp.git

2. 프로젝트 루트폴더에 .env 파일을 설정합니다.

POSTGRES_HOST=
POSTGRES_DATABASE=
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_CONTAINER_PORT=
NGINX_HOST_PORT=
NGINX_CONTAINER_PORT=
BACKEND_PORT=
FRONTEND_PORT=
PGADMIN_HOST_PORT=
PGADMIN_CONTAINER_PORT=
PGADMIN_DEFAULT_EMAIL=
PGADMIN_DEFAULT_PASSWORD=
FORTY_TWO_CLIENT_ID=
FORTY_TWO_CLIENT_SECRET=
GITHUB_ID=
GITHUB_SECRET=
JWT_SECRET=
JWT_EXPIRED=
TZ=
NEXTAUTH_URL=
NEXTAUTH_SECRET=

3. docker를 구동하고 Makefile 혹은 docker-compose 명령어를 실행합니다.

make or docker-compose up -d --build

pnmp's People

Contributors

jiwon-woo avatar minsikim-42 avatar kimhxsong avatar jin-sungdae avatar ovzwk4rq avatar

Stargazers

 avatar JIN HYEOK LEE avatar  avatar

pnmp's Issues

[feat] github 로그인 없애기

Description

프론트 리팩토링

Todo

  • github 로그인 없애기
  • eslint 적용
  • == 를 === 로 바꾸기
  • catch console.log 변경
  • import 및 안쓰는 거 없애기

[feat] 채널 페이지

Description

채널 페이지를 만듭니다.

Todo

  • 채널에 참여한 유저 목록
  • 채널에 유저 초대
  • 참여한 유저를 ban, mute 하거나 권한을 부여할수 있는 버튼/모달 등등
  • 채널 비밀번호를 바꿀수 있는 기능

[feat] OAuth

Description

OAuth Login 기능 구현

Todo

  • OAuth로 로그인 및 로그아웃
  • 처음 로그인 때 DB에 유저 정보를 저장

[setup] 프로젝트 개발 환경 구축

Description

본격적으로 개발을 진행하기에 앞서 개발 환경을 구축합니다. 도커파일 및 도커컴포즈 파일 작성은 진행했던 @kjh6b6a68 @minsikim-42 님이 ping-neo-meo-pong/pong_toy에서 작성한 도커파일과 @Jiwon-Woo 님이 ping-neo-meo-pong/ts-docker 에서 작성한 도커파일 및 도커컴포즈 파일을 참고합니다. 목록에 추가할 내용이 있다면 코멘트를 남겨주세요.

Todo

  • 깃 커밋 메시지 및 브랜치 이름에 대한 깃훅 설정 (10.29 ~ 10.30)
  • 도커파일/ 도커컴포즈 파일 추가
  • airbnb 린트 도구 적용

[feat] 채널에 유저 초대하기

Description

채널에 유저 초대하기 기능 추가 및 기타 api를 수정합니다

Todo

  • 채널에 유저 초대하는 기능 만들기
    • 초대 수락 기능도 필요
  • 채널에서 ban 하는 것과 block 하는 것 합치기
  • 특정 유저의 프로필을 조회할때 그 유저가 나와 친구인지, 내가 차단한 상대인지 알 수 있는 항목을 보내주기
  • 친구 목록을 서로 친구인 경우, 내가 친구 요청을 보낸 경우, 상대가 요청을 보낸 경우로 나누기
  • 로그인한 유저의 차단 목록을 불러오기

[feat]

Description

Todo

  • signup api
  • 프로필 이미지 수정 api

[feat] 채널 비밀번호 설정관련

Description

채널 비밀번호를 해싱합니다

Todo

  • 채널 비밀번호를 해싱해서 저장하기
  • 채널 정보 보내줄때 비밀번호 자체 대신 비밀번호 존재여부만 보내기

[feat]게임 데이터 배열화

Description

게임 데이터를 배열화하여 게임방 각각의 정보를 따로 수집할수 있게 함

Todo

  • data 배열화
  • 배열화에 따른 프론트 수정
  • LEFT유저, RIGHT유저, 관전유저 판독후 자리배정

[hotfix] 없는 유저의 프로필을 보려고 하면 이름이 비슷한 유저의 프로필이 나오는 문제

Description

현재 유저 프로필 페이지의 주소가 /profile/${username} 이고, 그것 때문에 페이지에서 유저 이름으로 유저 아이디 및 다른 정보들을 가져오기 위해 get /user?username=${username} api 를 이용합니다. 그런데 이 api 는 유저 이름이 정확히 일치하는 유저를 가져오는 것이 아니라 쿼리에 넣은 문자열을 포함하는 유저네임을 가진 모든 유저들의 배열을 가져오는 api 입니다. 현재는 그래서 가져온 유저들 중 첫번째 유저의 정보를 가지고 페이지를 띄우고 있는데, 그렇기 때문에 없는 유저의 프로필을 보려고 할때 이름이 비슷한 유저의 프로필이 나오게 됩니다.

이 문제는 다르게 고칠수도 있지만, 유저 프로필 페이지의 주소를 /profile/${userId} 이런식으로 바꾸는게 가장 상식적인것 같아서 이렇게 바꿀려고 합니다.

Todo

  • [ ]

[feat] 프로필 이미지 서버에 저장

Description

프로필 이미지를 설정할 수 있게 합니다.

Todo

  • 회원가입 추가 (POST /auth/signup api)
  • 프로필 이미지 수정 api 추가 (PATCH user/profile-image)

[feat] 로그인 페이지를 거치지 않고 로그인이 필요한 페이지들에 접속했을 때 생기는 모든 에러 제거

Description

현재 / 와 /login 페이지를 제외한 나머지 페이지들(/clients, /dm/[roomId], /game/[roomId])에 직접 url 을 입력해서 들어가려고 하거나, 그 페이지들에서 새로고침을 하게 되면 unhandled runtime error 가 발생하는데, 이럴 경우에도 정상적인 동작을 하도록 수정하려고 합니다.

Todo

  • 소켓 연결 등 현재 부적절한 위치에 있는 코드들을 정상적인 위치로 옮기기
  • 쿠키를 이용해 로그인되었는지 확인하고 그에 따라 적절한 위치로 리다이렉션

[feat] user_data, is_player 삭제, live&readerboard 페이지 생성 & 래더점수 개혁

Description

새로고침이후 user_data가 초기화되므로 user_data를 import할 필요가 없음
is_player는 이제 필요없는 변수(게임페이지에서 플레이어인지 확인)
live페이지
리더보드페이지 -> ladder점수 개혁필요, 1승마다 1점식 오르고 매칭레벨은 n / 10으로 대충 떼울까 생각중

Todo

  • user_data not import
  • delete is_player
  • 대충 live 페이지
  • 대충 래더점수 개혁
  • 대충 readerboard 페이지

[feat] 플레이어가 게임 중간에 나갔을때

Description

플레이어가 중간에 나갔을때 시간초를 두어 이 안에 들어오지 못할경우 실격패가 되게 합니다.
또한 시작전에도 약 3초간의 대기시간을 두려합니다.

Todo

  • 나간 유저가 플레이어면 게임 중지
  • 중지된 게임은 시간안에 플레이어가 들어오지 못할경우 실격패
  • 시작전 3초가량의 대기시간
  • 게임 코드로직 리펙토링

[setup] ts-docker 리포지토리 이주

Description

프로젝트 도커환경 구성을 위해 생성했던 리포지토리인 ts-docker에 테스트 코드를 추가하면서 도커환경 구성파일이 아닌 어플리케이션 코드가 쌓이기 시작했습니다. 어플리케이션 코드가 쌓이기 시작했으나 본래 본 프로젝트와 별개의 리포지토리로 생각하여 깃 커밋메시지 및 브랜치 이슈 관리가 잘 이루어지지 않았기 때문에 보다 잘 관리하기 위해 커밋메시지, 브랜치 명에 대한 제약을 걸어 둔 pnmp 리포지토리로 이주합니다.

[feat] OAuth

Description

OAuth Login 기능 구현

Todo

  • OAuth로 로그인 및 로그아웃
  • 처음 로그인 때 DB에 유저 정보를 저장

[feat] dm 방을 생성할 때, 사용자를 검색할 수 있는 기능 추가

Description

  • dm 방을 생성할 때 검색을 통하여 사용자를 선택할 수 있게 합니다.

Todo

  • events.gateway.ts 에서 dm.gateway.ts 을 분리
  • dm 방을 생성할 때 사용자를 검색할 수 있는 검색창과 검색 자동완성 기능을 추가
  • dm을 보낼 때 보낸 사용자의 username과 시간을 표시

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.