| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- // TODO remove this setting after implemented all
- /* eslint-disable no-unused-vars */
- const loggerFactory = require('@alias/logger');
- const logger = loggerFactory('growi:routes:apiv3:share-links');
- const express = require('express');
- const router = express.Router();
- const { body, query } = require('express-validator/check');
- const ErrorV3 = require('../../models/vo/error-apiv3');
- const validator = {};
- const today = new Date();
- /**
- * @swagger
- * tags:
- * name: ShareLink
- */
- module.exports = (crowi) => {
- const loginRequired = require('../../middleware/login-required')(crowi);
- const csrf = require('../../middleware/csrf')(crowi);
- const { ApiV3FormValidator } = crowi.middlewares;
- const ShareLink = crowi.model('ShareLink');
- /**
- * @swagger
- *
- * paths:
- * /share-links/:
- * post:
- * tags: [ShareLink]
- * description: get share links
- * parameters:
- * - name: relatedPage
- * in: query
- * required: true
- * description: page id of share link
- * schema:
- * type: string
- * responses:
- * 200:
- * description: Succeeded to get share links
- */
- router.get('/', loginRequired, csrf, ApiV3FormValidator, async(req, res) => {
- const { relatedPage } = req.query;
- try {
- const paginateResult = await ShareLink.find({ relatedPage: { $in: relatedPage } });
- return res.apiv3({ paginateResult });
- }
- catch (err) {
- const msg = 'Error occurred in get share link';
- logger.error('Error', err);
- return res.apiv3Err(new ErrorV3(msg, 'get-shareLink-failed'));
- }
- });
- validator.shareLinkStatus = [
- // validate the page id is null
- body('relatedPage').not().isEmpty().withMessage('Page Id is null'),
- // validate expireation date is not empty, is not before today and is date.
- body('expiredAt').isAfter(today.toString()).withMessage('Your Selected date is past'),
- // validate the length of description is max 100.
- body('description').isLength({ min: 0, max: 100 }).withMessage('Max length is 100'),
- ];
- /**
- * @swagger
- *
- * paths:
- * /share-links/:
- * post:
- * tags: [ShareLink]
- * description: Create new share link
- * parameters:
- * - name: relatedPage
- * in: query
- * required: true
- * description: page id of share link
- * schema:
- * type: string
- * - name: expiredAt
- * in: query
- * description: expiration date of share link
- * schema:
- * type: string
- * - name: description
- * in: query
- * description: description of share link
- * schema:
- * type: string
- * responses:
- * 200:
- * description: Succeeded to create one share link
- */
- router.post('/', loginRequired, csrf, validator.shareLinkStatus, ApiV3FormValidator, async(req, res) => {
- const { relatedPage, expiredAt, description } = req.body;
- const ShareLink = crowi.model('ShareLink');
- try {
- const postedShareLink = await ShareLink.create({ relatedPage, expiredAt, description });
- return res.apiv3(postedShareLink);
- }
- catch (err) {
- const msg = 'Error occured in post share link';
- logger.error('Error', err);
- return res.apiv3Err(new ErrorV3(msg, 'post-shareLink-failed'));
- }
- });
- // TDOO write swagger
- router.delete('/all', loginRequired, async(req, res) => {
- const { relatedPage } = req.body;
- // TODO GW-2694 Delete all share links
- });
- /**
- * @swagger
- *
- * /share-links/{id}:
- * delete:
- * tags: [ShareLinks]
- * description: delete one share link related one page
- * parameters:
- * - name: id
- * in: path
- * required: true
- * description: id of share link
- * schema:
- * type: string
- * responses:
- * 200:
- * description: Succeeded to delete one share link
- */
- router.delete('/:id', loginRequired, csrf, async(req, res) => {
- const { id } = req.params;
- try {
- const deletedShareLink = await ShareLink.findOneAndRemove({ _id: id });
- return res.apiv3(deletedShareLink);
- }
- catch (err) {
- const msg = 'Error occurred in delete share link';
- logger.error('Error', err);
- return res.apiv3Err(new ErrorV3(msg, 'delete-shareLink-failed'));
- }
- });
- return router;
- };
|