Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions backend/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ CLOUDINARY_API_SECRET=
EMAIL_USER=
EMAIL_PASS=

COLLABORATION_PUBLIC_URL=


VITE_SERVER_DOMAIN=https://pjt-blog.onrender.com

VITE_SERVER_DOMAIN=https://code-a2z.onrender.com

15 changes: 15 additions & 0 deletions backend/Controllers/collaboration.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,28 @@ export const invitationToCollaborate = async(req, res)=>{
const user = await User.findById(userid);
if(!user) return res.status(404).json({error: "User not found!"});
const projectToCollaborate = await Project.findOne({project_id: project_id}).populate("author", "personal_info.email");

if(user._id.toString() === projectToCollaborate.author._id.toString()){
return res.status(400).json({error: "You cannot invite yourself to collaborate on your own project."});
}



if(!projectToCollaborate) return res.status(404).json({error: "Project not found!"});

const authorEmail = projectToCollaborate.author.personal_info.email;
const token = crypto.randomBytes(16).toString('hex');



const baseUrl = `http://localhost:${process.env.PORT || 8000}`;


const acceptLink = `${baseUrl}/api/collaboration/accept/${token}`;
const rejectLink = `${baseUrl}/api/collaboration/reject/${token}`;



const mailOptions = {
from: process.env.EMAIL_USER,
to: authorEmail,
Expand Down Expand Up @@ -67,6 +71,16 @@ export const invitationToCollaborate = async(req, res)=>{



export const getListOfCollaborators = async(req, res)=>{
const userid = req.user;
const {project_id} = req.params;
try {
const existingCollaborators = await collaboration.find({project_id: project_id, author_id: userid});
if(!existingCollaborators) return res.status(404).json({error: "No collaborators found!"});
return res.status(200).json({collaborators: existingCollaborators});
} catch (error) {


export const acceptInvitation = async(req, res)=>{
const token = req.params.token;
const id = req.user;
Expand All @@ -85,6 +99,7 @@ export const acceptInvitation = async(req, res)=>{
}
}


export const rejectInvitation = async(req,res)=>{
const token = req.params.token;
const id = req.user;
Expand Down
7 changes: 7 additions & 0 deletions backend/Routes/api/collaboration.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@ import express from "express";
import { authenticateUser } from "../../Middlewares/auth.middleware.js";


import {invitationToCollaborate,getListOfCollaborators } from "../../Controllers/collaboration.controller.js";
const collaborationRoutes = express.Router();

collaborationRoutes.post("/invite", authenticateUser, invitationToCollaborate);
collaborationRoutes.get("/collaborators/:project_id", authenticateUser, getListOfCollaborators);


import {invitationToCollaborate, acceptInvitation, rejectInvitation} from "../../Controllers/collaboration.controller.js";
const collaborationRoutes = express.Router();

Expand Down
14 changes: 14 additions & 0 deletions backend/Routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,19 @@ import mediaRoutes from './api/media.routes.js';
import projectRoutes from './api/project.routes.js';
import notificationRoutes from './api/notification.routes.js';
import subscriberRoutes from './api/subscriber.routes.js';

import collaborationRoutes from './api/collaboration.routes.js';

const router = express.Router();

router.use('/auth', authRoutes);
router.use('/user', userRoutes);
router.use('/media', mediaRoutes);
router.use('/project', projectRoutes);
router.use('/notification', notificationRoutes);
router.use('/subscriber', subscriberRoutes);
router.use('/collaboration', collaborationRoutes);

import collectionRoutes from './api/collections.routes.js';
import collaborationRoutes from './api/collaboration.routes.js';
import { authMiddleware, generalMiddleware } from '../Middlewares/rateLimit/index.js';
Expand All @@ -20,4 +33,5 @@ router.use('/subscriber', generalMiddleware, subscriberRoutes);
router.use('/collection', generalMiddleware, collectionRoutes);
router.use('/collaboration', generalMiddleware, collaborationRoutes);


export default router;
Loading