Skip to content
Snippets Groups Projects
Commit 772baba4 authored by Eunhak Lee's avatar Eunhak Lee
Browse files

Merge branch 'feat/verified-combination' into 'main'

내 PC를 인증된 조합으로 공유하기 기능

See merge request !20
parents b7f7c909 527c60ca
No related branches found
No related tags found
1 merge request!20내 PC를 인증된 조합으로 공유하기 기능
Pipeline #10831 passed
import pool from '../db.js';
const ShareRepository = {
async createCombinationUuid(combinationId) {
const resp = await pool.query(
`INSERT INTO shares (combination_id)
VALUES ($1)
RETURNING uuid;`,
[combinationId]
);
const [uuid] = resp.rows;
return uuid;
},
async getCombinationByUuid(uniqueId) {
const resp = await pool.query(
`SELECT
shares.combination_id,
array(SELECT relations.part_id FROM relations WHERE relations.combination_id = shares.combination_id) as parts,
shares.created_at,
(SELECT created_at FROM combinations WHERE combinations.id = shares.combination_id) as verified_at
FROM shares
WHERE uuid=$1;`,
[uniqueId]
);
const [row] = resp.rows;
return row;
},
};
export default ShareRepository;
......@@ -43,6 +43,18 @@ myRouter.patch(
})
);
myRouter.post(
'/pc/:combinationId/uuid',
authMiddleware,
wrapAsync(async (req, res) => {
const { combinationId } = req.params;
const userId = req.user?.userId;
const uuid = await myService.createCombinationUuid(userId, combinationId);
res.sendResponse('', 200, { uuid });
})
);
myRouter.get(
'/registration-code',
authMiddleware,
......
......@@ -52,4 +52,13 @@ partRouter.get(
})
);
partRouter.get(
'/combination/by-uuid/:uuid',
wrapAsync(async (req, res) => {
const { uuid } = req.params;
const info = await PartService.getCombinationByUuid(uuid);
return res.sendResponse('', 200, { ...info });
})
);
export default partRouter;
import { Redis } from '../redis.js';
import { ReportableError } from '../errors.js';
import myRepository from '../repositories/myRepository.js';
import ShareRepository from '../repositories/shareRepository.js';
import crypto from 'crypto';
const myService = {
......@@ -163,6 +164,20 @@ const myService = {
message: '조합 이름이 성공적으로 변경되었습니다.',
};
},
async createCombinationUuid(userId, combinationId) {
if (!userId || !combinationId)
throw new ReportableError(400, '올바르지 않은 요청입니다.');
const combination = await myRepository.getCombinationById(combinationId);
if (!combination)
throw new ReportableError(404, '조합을 찾을 수 없습니다.');
if (combination.userId !== userId)
throw new ReportableError(403, '해당 조합에 대한 권한이 없습니다.');
return await ShareRepository.createCombinationUuid(combinationId);
},
};
export default myService;
import { columnMapping } from '../constants/columnMapping.js';
import { ReportableError } from '../errors.js';
import PartRepository from '../repositories/partRepository.js';
import ShareRepository from '../repositories/shareRepository.js';
const PartService = {
cleanEntity(entity) {
......@@ -108,6 +109,14 @@ const PartService = {
partIds: combination.partids,
}));
},
async getCombinationByUuid(uuid) {
if (!uuid) throw new ReportableError(400, '올바르지 않은 요청입니다.');
const { combination_id, parts, created_at, updated_at } =
await ShareRepository.getCombinationByUuid(uuid);
return { combination_id, parts, created_at, updated_at };
},
};
export default PartService;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment