Skip to content

Commit 3e8c0d7

Browse files
Merge pull request #2 from call-0f-code/project-routes
Project routes- working
2 parents 2cf7e7b + 97367fc commit 3e8c0d7

8 files changed

Lines changed: 415 additions & 1 deletion

File tree

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import * as projectService from "../services/project.service";
2+
import { Request , Response } from "express";
3+
import { ApiError } from "../utils/apiError";
4+
5+
export const getProjects = async ( req : Request , res : Response ) => {
6+
7+
try {
8+
const projects = await projectService.getPrjects();
9+
res.json(projects);
10+
} catch (error) {
11+
throw new ApiError( "No project found !!!" , 404)
12+
}
13+
};
14+
15+
export const getProjectById = async ( req : Request , res : Response ) => {
16+
17+
try{
18+
const projectId = parseInt( req.params.projectId );
19+
const project = await projectService.getProjectById( projectId );
20+
res.json(project);
21+
22+
}catch(error){
23+
throw new ApiError("No project with this ID" , 404);
24+
}
25+
};
26+
27+
export const createProject = async ( req : Request , res : Response ) => {
28+
29+
try {
30+
const projectContent = {
31+
name: req.body.name,
32+
imageUrl: req.body.imageUrl,
33+
githubUrl: req.body.githubUrl,
34+
deployUrl: req.body.deployUrl,
35+
adminId: req.AdminId,
36+
};
37+
38+
const project = await projectService.createProject(projectContent);
39+
res.json(project);
40+
41+
} catch (error) {
42+
throw new ApiError( error as string , 404);
43+
}
44+
};
45+
46+
export const updateProjects = async ( req : Request , res : Response ) => {
47+
48+
try {
49+
const projectInfo = req.body;
50+
const projectId = parseInt(req.params.projectId);
51+
if( !projectId ) throw new ApiError( " Send The project id " , 401);
52+
53+
const project = await projectService.updateProjects( projectInfo , projectId );
54+
res.json(project)
55+
56+
} catch (error) {
57+
throw new ApiError(error as string , 404);
58+
}
59+
}
60+
61+
62+
export const deleteProjects = async ( req : Request , res : Response ) => {
63+
64+
try {
65+
const projectId = parseInt(req.params.projectId);
66+
if( !projectId ) throw new ApiError( " Send The project id " , 401);
67+
68+
69+
const deleted = await projectService.deleteProjects( projectId );
70+
res.json(deleted)
71+
72+
} catch (error) {
73+
console.log(error)
74+
throw new ApiError( error as string , 404);
75+
}
76+
77+
}
78+
79+
export const getMembersByProjectId = async ( req : Request , res : Response ) => {
80+
81+
try {
82+
const projectId = parseInt( req.params.ProjectId );
83+
84+
if( !projectId ) throw new ApiError( " Project Id required !!! " , 401);
85+
86+
const members = await projectService.getMembersByProjectId(projectId);
87+
res.json(members)
88+
89+
}
90+
catch (error) {
91+
throw new ApiError( error as string , 404);
92+
}
93+
94+
95+
}
96+
97+
export const addMembers = async ( req : Request , res : Response ) => {
98+
99+
try {
100+
const data = {
101+
projectId : parseInt ( req.params.projectId ),
102+
memberId : req.body.memberId
103+
}
104+
105+
const member = await projectService.addMembers( data );
106+
res.json(member)
107+
} catch (error) {
108+
console.log(error)
109+
throw new ApiError( error as string , 404);
110+
}
111+
}
112+
113+
114+
export const removeMembers = async ( req : Request , res : Response ) => {
115+
116+
try {
117+
const data = {
118+
projectId : parseInt ( req.params.projectId ),
119+
memberId : req.body.memberId
120+
}
121+
122+
const removedMember = await projectService.removeMembers(data);
123+
res.json(removedMember);
124+
125+
} catch (error) {
126+
throw new ApiError( error as string , 404);
127+
}
128+
}
129+

src/db/client.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { PrismaClient } from "../generated/prisma";
2+
3+
const prisma = new PrismaClient();
4+
5+
export { prisma };

src/routes/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import projectsRouter from './projects'
88
export default function routes(upload: Multer, supabase: SupabaseClient) {
99
const router = Router()
1010

11-
router.use('/members', membersRouter(upload, supabase))
11+
// router.use('/members', membersRouter(upload, supabase))
1212
router.use('/projects', projectsRouter(upload, supabase))
1313
// … mount other routers, just write xyzRouter() if the routes in that router don't need multer or supabase
1414

src/routes/progress.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { Router } from 'express'
2+
import { Multer } from 'multer'
3+
import { SupabaseClient } from '@supabase/supabase-js'
4+
import {
5+
addMembers,
6+
createProject,
7+
deleteProjects,
8+
getMembersByProjectId,
9+
getProjectById,
10+
getProjects,
11+
removeMembers,
12+
updateProjects
13+
} from '../controllers/project.controller'
14+
15+
16+
17+
export default function projectsRouter(
18+
upload: Multer,
19+
supabase: SupabaseClient
20+
) {
21+
const router = Router()
22+
23+
// Getting all User
24+
router.get(
25+
'/',
26+
getProjects
27+
)
28+
29+
// get Project by Id
30+
router.get(
31+
'/:projectId',
32+
getProjectById
33+
)
34+
35+
// Create project
36+
router.post(
37+
'/',
38+
createProject
39+
)
40+
41+
// Update Project
42+
router.patch(
43+
'/:projectId',
44+
updateProjects
45+
)
46+
47+
// delete projects
48+
router.delete(
49+
'/:projectId',
50+
deleteProjects
51+
)
52+
53+
// getMember by ProjectId
54+
55+
router.get(
56+
'/:projectId/members',
57+
getMembersByProjectId
58+
)
59+
60+
// add member to project
61+
router.post(
62+
'/:projectId/members',
63+
addMembers
64+
)
65+
66+
// Remover the memnber
67+
router.delete(
68+
'/:projectId/members/:memberId',
69+
removeMembers
70+
)
71+
72+
// Photo upload endpoint:
73+
// router.post(
74+
// '/:projectId/photo',
75+
// upload.single('photo'),
76+
// (req, res, next) => memberCtrl.uploadPhoto(req, res, next, supabase)
77+
// )
78+
79+
80+
return router
81+
}

src/routes/projects.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { Router } from 'express'
2+
import { Multer } from 'multer'
3+
import { SupabaseClient } from '@supabase/supabase-js'
4+
import {
5+
addMembers,
6+
createProject,
7+
deleteProjects,
8+
getMembersByProjectId,
9+
getProjectById,
10+
getProjects,
11+
removeMembers,
12+
updateProjects
13+
} from '../controllers/project.controller'
14+
15+
16+
17+
export default function projectsRouter(
18+
upload: Multer,
19+
supabase: SupabaseClient
20+
) {
21+
const router = Router()
22+
23+
// Getting all User
24+
router.get(
25+
'/',
26+
getProjects
27+
)
28+
29+
// get Project by Id
30+
router.get(
31+
'/:projectId',
32+
getProjectById
33+
)
34+
35+
// Create project
36+
router.post(
37+
'/create',
38+
createProject
39+
)
40+
41+
// Update Project
42+
router.patch(
43+
'/:projectId',
44+
updateProjects
45+
)
46+
47+
// delete projects
48+
router.delete(
49+
'/:projectId',
50+
deleteProjects
51+
)
52+
53+
// getMember by ProjectId
54+
55+
router.get(
56+
'/:projectId/members',
57+
getMembersByProjectId
58+
)
59+
60+
// add member to project
61+
router.post(
62+
'/:projectId/members',
63+
addMembers
64+
)
65+
66+
// Remover the memnber
67+
router.delete(
68+
'/:projectId/members/:memberId',
69+
removeMembers
70+
)
71+
72+
// Photo upload endpoint:
73+
// router.post(
74+
// '/:projectId/photo',
75+
// upload.single('photo'),
76+
// (req, res, next) => memberCtrl.uploadPhoto(req, res, next, supabase)
77+
// )
78+
79+
80+
return router
81+
}

src/services/project.service.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { prisma } from "../db/client";
2+
3+
4+
export const getPrjects = async () => {
5+
return await prisma.project.findMany({})
6+
};
7+
8+
9+
10+
export const getProjectById = async ( projectId : number ) => {
11+
12+
return await prisma.project.findFirst({
13+
where : {
14+
id : projectId
15+
}
16+
})
17+
};
18+
19+
export const createProject = async ( projectContent : projectContent ) => {
20+
21+
return await prisma.project.create({
22+
data : {
23+
name : projectContent.name,
24+
imageUrl : projectContent.imageUrl,
25+
githubUrl : projectContent.githubUrl,
26+
deployUrl : projectContent.deployUrl,
27+
}
28+
})
29+
};
30+
31+
export const updateProjects = async ( payload : updateContent , projectId : number ) => {
32+
33+
const data = payload;
34+
return await prisma.project.update({
35+
where : {
36+
id : projectId,
37+
},
38+
data,
39+
})
40+
}
41+
42+
export const deleteProjects = async ( projectId : number ) => {
43+
44+
return await prisma.project.delete({
45+
where : {
46+
id : projectId
47+
}
48+
})
49+
}
50+
51+
export const getMembersByProjectId = async ( projectId : number ) => {
52+
53+
return await prisma.memberProject.findMany({
54+
where : {
55+
projectId,
56+
}
57+
})
58+
}
59+
60+
export const addMembers = async ( addMembersData : addMembersData ) => {
61+
62+
return await prisma.memberProject.create({
63+
data :{
64+
memberId : addMembersData.memberId,
65+
projectId : addMembersData.projectId,
66+
}
67+
})
68+
}
69+
70+
71+
export const removeMembers = async ( removedMemberData : removedMemberData ) => {
72+
73+
return await prisma.memberProject.delete({
74+
where : {
75+
memberId_projectId : {
76+
projectId : removedMemberData.projectId,
77+
memberId: removedMemberData.memberId
78+
}
79+
80+
}
81+
})
82+
}
83+

0 commit comments

Comments
 (0)