API 설계 - 42-Tomodachi/ft_transcendence GitHub Wiki


최초 로그인의 경우 - 사진 업로드 + 닉네임 설정 페이지



  • isSigned(가입되어있는지, 아닌지)
  • 닉네임 중복체크 요청 : string (최소 2자, 최대 8자) => 프론트에서도 체크하지만 백에서도 체크해야함 응답 : Boolean
  • 유저 등록 post 요청 : 사진(바이너리), 닉네임(string) 응답 : (닉네임 재 체크 후) true, false

2차인증 활성화한 경우



  • isSecondAuth(2차인증 활성화 여부)

메인 페이지 - 게임 리스트



  • 게임방 목록 [ { gameId: number | string, roomTitle: string, playerCount: number, isPublic: boolean, isStart: boolean, }, // ... ]
  • 유저리스트 [ { userId: number | string, nickname: string, isOnline: boolean, isGaming: boolean, isFriend: boolean, }, // ... ]
  • 로그인한 유저 프로필 { userId: number | string, nickname: string, level: number, profileImage: string, isSecondAuth: boolean, record: { general: { win: number, lose: number, }, ladder: { win: number, lose: number, } } }

메인 페이지 - 채팅 리스트



  • 채팅방 목록 [ { chatId: number | string, roomTitle: string, playerCount: number, isPublic: boolean, isEntered: boolean }, // ... ]

메인 페이지 - 프로필 보기



  • Id나 nickname 으로 요청시 [ { userId: number | string, nickname: string, isOnline: boolean, isGaming: boolean, isFriend: boolean, isBlock: boolean }, // ... ]

채팅페이지



  • Message ? 는 옵셔널이지만 isBroadcast가 true일때만 from 빼기 [ { id: number; isBroadcast: boolean; from?: { id: number; nickname: string; profileImage: string; }; message: string; fromUser: boolean; createdAt: string | number; }, ] 배열은 기존 대화 불러올때, 이후 소켓으로 메세지 추가될때마다는 배열이 아닌 객체로 보내주면 될 것 같습니다
  • 방 ID로 구분 유저리스트 [ { userId: number | string, nickname: string, role: string(owner | manager| none) }, // ... ]

방 소유자 - 프로필보기



  • 불러오기 [ { userId: number | string, nickname: string, isOnline: boolean, isGaming: boolean, isFriend: boolean, isBlock: boolean, role: string(owner | manager | none) isMuted: boolean }, // ... ]

dhyeon's lagacy

login

parameter
{
	"code": string
}

return

{
  "data": {
		"token": string,
		"isSigned": bool,
		"secondAuth": bool,
	},
	"success": bool,
  "messgae": string
}

/nickname/{nickname}

parameter

{
}

return

{
  "data": {
		"isExist": bool
	},
	"success": bool,
  "messgae": string
}

/user

/user

본인 데이터의 경우

POST

body

{
	"nickname": string,
	"imageData": {}
}

return

{
	"success": bool,
  "messgae": string
}

PUT body

{
	"nickname": string,
	"imageData": {}
}

nickname or imageData return

{
	"success": bool,
  "messgae": string
}

/user/{id}

다른 유저의 경우

GET

parameter

{
}

return

{
  "data": {
		"nickname": string,
		"level": number,
		"score": [1, 1], // 승, 패
		"radder": [number, number],
		"profileImage": string,
	},
	"success": bool,
  "messgae": string
}

/user/detail

/user/detail/{id}

parameter

{
	"chattingRoomId": string | number
}

return

{
  "data": {
		"isFriend": bool,
		"isBlocked": bool,
		"role": number,
	},
	"success": bool,
  "messgae": string
}

/record

/record

parameter

{
}

return

{
  "data": [
		{
			"isRadder": bool,
			"score": bool,
			"opponent": string
		}, 
		{...}
	],
	"success": bool,
  "messgae": string
}

최신순, 최대 10개까지


secondAuth

GET

users/email

parameter

{
"email" : string
}

return

bool

POST

users/emailVerify

parameter

"code" : number

return

"success" : bool

POST

users/emailAuthSetup

parameter

return


socket으로 관리해야하는 데이터

  • 전체 유저 리스트
    • (온라인, 오프라인, 게임중)
  • 전체 게임방 리스트
    • 게임중, 대기중
    • 인원수
    • 방 제목
    • 비공개, 공개
  • 전체 채팅방 리스트
    • 인원수
    • 방 제목
    • 비공개, 공개
  • 참여중인 채팅방 리스트
    • 인원수
    • 방 제목
    • 비공개, 공개
  • 채팅방
    • 참여 유저 리스트
    • 방 소유자/ 관리자
  • 게임방


Auth

POST /auth/signup

  • request body
{
// user informations //
"token": string
}
  • query parameters
  • response body
{
"success": bool,
"message": string
}

Users

...


api spec form example

method uri

  • request body
{
  "key": "value",
}
  • query parameters
  - parameter1
    - type: string
    - required: true
    - default: "test"
    - description: "use for get access token"
  - parameter2
    - type: number
    - required: false
    - default: 42
    - description: memo
  • response body
{
  "key": "value",
}