-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' of github.com:TeamSparker/Spark-Server into fe…
…ature/#13
- Loading branch information
Showing
10 changed files
with
3,473 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,8 @@ | ||
const express = require('express'); | ||
const router = express.Router(); | ||
const { checkUser } = require('../../../middlewares/auth'); | ||
|
||
// router.post('/signup', require('./userSignupPOST')); | ||
router.get('/code/:code', checkUser, require('./roomCodeGET')); | ||
router.post('', checkUser, require('./roomPOST')); | ||
|
||
module.exports = router; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/** | ||
* @코드로_대기_방_정보_확인 | ||
* @route GET /room/code/:code | ||
* @error | ||
* 1. 참여 코드가 전달되지 않음 | ||
* 2. 참여코드에 일치하는 방이 없는 경우 | ||
* 3. 이미 시작된 습관방인 경우 | ||
* 4. 이미 참여중인 방인 경우 | ||
* 5. 한번 내보내진 사용자인 경우 | ||
*/ | ||
|
||
const functions = require('firebase-functions'); | ||
const util = require('../../../lib/util'); | ||
const statusCode = require('../../../constants/statusCode'); | ||
const responseMessage = require('../../../constants/responseMessage'); | ||
const db = require('../../../db/db'); | ||
const { userDB, roomDB } = require('../../../db'); | ||
|
||
module.exports = async (req, res) => { | ||
const { code } = req.params; | ||
const user = req.user; | ||
const userId = user.userId; | ||
|
||
// @error 1. 참여 코드가 전달되지 않음 | ||
if (!code) { | ||
return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, responseMessage.NULL_VALUE)); | ||
} | ||
|
||
let client; | ||
|
||
try { | ||
client = await db.connect(req); | ||
|
||
const room = await roomDB.getRoomByCode(client, code); | ||
|
||
// @error 2. 참여 코드에 일치하는 방이 없음 | ||
if (!room) { | ||
return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, responseMessage.GET_WAITROOM_DATA_NULL)); | ||
} | ||
|
||
// @error 3. 참여 코드에 해당하는 방은 이미 습관 시작한 방임 | ||
if (room.isStarted) { | ||
return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, responseMessage.GET_WAITROOM_DATA_STARTED)); | ||
} | ||
|
||
// @error 5. 한번 내보내진 사용자인 경우 | ||
const isKicked = await roomDB.checkKickedByRoomIdAndUserId(client, room.roomId, userId); | ||
if (isKicked) { | ||
return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, responseMessage.GET_WAITROOM_DATA_KICKED)); | ||
} | ||
|
||
const creator = await userDB.getUserById(client, room.creator); | ||
const entries = await roomDB.getEntriesByRoomId(client, room.roomId); | ||
const imageNum = 3; | ||
let profileImgs = []; | ||
|
||
for (let i = 0; i < entries.length; i++) { | ||
if (i < imageNum) { | ||
let user = await userDB.getUserById(client, entries[i].userId); | ||
profileImgs.push(user.profileImg); | ||
} | ||
|
||
// @error 4. 이미 해당 습관에 참여중인 사용자 | ||
if (userId === entries[i].userId) { | ||
return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, responseMessage.GET_WAITROOM_DATA_ALREADY)); | ||
} | ||
} | ||
|
||
const data = { | ||
roomId: room.roomId, | ||
roomName: room.roomName, | ||
creatorName: creator.nickname, | ||
createrImg: creator.profileImg, | ||
profileImgs, | ||
totalNums: entries.length, | ||
}; | ||
|
||
res.status(statusCode.OK).send(util.success(statusCode.OK, responseMessage.READ_ONE_POST_SUCCESS, data)); | ||
} catch (error) { | ||
functions.logger.error(`[ERROR] [${req.method.toUpperCase()}] ${req.originalUrl}`, `[CONTENT] ${error}`); | ||
console.log(error); | ||
res.status(statusCode.INTERNAL_SERVER_ERROR).send(util.fail(statusCode.INTERNAL_SERVER_ERROR, responseMessage.INTERNAL_SERVER_ERROR)); | ||
} finally { | ||
client.release(); | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/** | ||
* @습관방_생성 | ||
* @route POST /room | ||
* @body roomName:string, fromStart:boolean | ||
* @error | ||
* 1. 습관방 이름 / 습관방 타입이 전달되지 않음 | ||
*/ | ||
|
||
const functions = require('firebase-functions'); | ||
const util = require('../../../lib/util'); | ||
const statusCode = require('../../../constants/statusCode'); | ||
const responseMessage = require('../../../constants/responseMessage'); | ||
const db = require('../../../db/db'); | ||
const { userDB, roomDB } = require('../../../db'); | ||
const { nanoid } = require('nanoid'); | ||
|
||
module.exports = async (req, res) => { | ||
const { roomName, fromStart } = req.body; | ||
const user = req.user; | ||
|
||
console.log(roomName, fromStart); | ||
|
||
// error 1. 습관방 이름 또는 타입이 전달되지 않음 | ||
if (!roomName || typeof fromStart !== 'boolean') { | ||
return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, responseMessage.NULL_VALUE)); | ||
} | ||
|
||
let client, code, creatorId; | ||
let isCodeUnique = false; | ||
|
||
try { | ||
client = await db.connect(req); | ||
while (!isCodeUnique) { | ||
code = nanoid(7); | ||
isCodeUnique = await roomDB.isCodeUnique(client, code); | ||
} | ||
|
||
creatorId = user.userId; | ||
|
||
const room = await roomDB.addRoom(client, roomName, code, creatorId, fromStart); | ||
let data = { | ||
roomId: room.roomId, | ||
roomName: room.roomName, | ||
code: room.code, | ||
}; | ||
console.log(room.roomId); | ||
|
||
res.status(statusCode.OK).send(util.success(statusCode.OK, responseMessage.CREATE_ROOM_SUCCESS, data)); | ||
} catch (error) { | ||
functions.logger.error(`[ERROR] [${req.method.toUpperCase()}] ${req.originalUrl}`, `[CONTENT] ${error}`); | ||
console.log(error); | ||
|
||
res.status(statusCode.INTERNAL_SERVER_ERROR).send(util.fail(statusCode.INTERNAL_SERVER_ERROR, responseMessage.INTERNAL_SERVER_ERROR)); | ||
} finally { | ||
client.release(); | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
module.exports = { | ||
userDB: require('./user'), | ||
roomDB: require('./room'), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
const _ = require('lodash'); | ||
const convertSnakeToCamel = require('../lib/convertSnakeToCamel'); | ||
|
||
const addRoom = async (client, roomName, code, creator, fromStart) => { | ||
const { rows } = await client.query( | ||
` | ||
INSERT INTO spark.room as r | ||
(room_name, code, creator, from_start) | ||
VALUES | ||
($1, $2, $3, $4) | ||
RETURNING * | ||
`, | ||
[roomName, code, creator, fromStart], | ||
); | ||
return convertSnakeToCamel.keysToCamel(rows[0]); | ||
}; | ||
|
||
const isCodeUnique = async (client, code) => { | ||
const { rows } = await client.query( | ||
` | ||
SELECT * FROM spark.room as r | ||
WHERE code = $1 | ||
AND is_deleted = FALSE | ||
`, | ||
[code], | ||
); | ||
if (rows.length == 0) { | ||
return true; | ||
} | ||
return false; | ||
}; | ||
|
||
const getRoomByCode = async (client, code) => { | ||
const { rows } = await client.query( | ||
` | ||
SELECT * FROM spark.room | ||
WHERE code = $1 | ||
AND is_deleted = FALSE | ||
`, | ||
[code], | ||
); | ||
return convertSnakeToCamel.keysToCamel(rows[0]); | ||
}; | ||
|
||
const getEntriesByRoomId = async (client, roomId) => { | ||
const { rows } = await client.query( | ||
` | ||
SELECT * FROM spark.entry | ||
WHERE room_id = $1 | ||
AND is_out = FALSE | ||
AND is_kicked = FALSE | ||
AND is_deleted = FALSE | ||
ORDER BY created_at | ||
`, | ||
[roomId], | ||
); | ||
return convertSnakeToCamel.keysToCamel(rows); | ||
}; | ||
|
||
const checkKickedByRoomIdAndUserId = async (client, roomId, userId) => { | ||
const { rows } = await client.query( | ||
` | ||
SELECT * FROM spark.entry | ||
WHERE room_id = $1 | ||
AND user_id = $2 | ||
AND is_kicked = TRUE | ||
AND is_deleted = FALSE | ||
`, | ||
[roomId, userId], | ||
); | ||
return convertSnakeToCamel.keysToCamel(rows); | ||
}; | ||
|
||
module.exports = { addRoom, isCodeUnique, getRoomByCode, getEntriesByRoomId, checkKickedByRoomIdAndUserId }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.