Skip to content

Commit

Permalink
Merge pull request #22 from Hack4Impact-UMD/responses-endpoints
Browse files Browse the repository at this point in the history
Add 3 Response endpoints
  • Loading branch information
nkanchinadam authored Apr 10, 2024
2 parents d5657e6 + 65a8537 commit 8188bd7
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/app/api/responses/[responseId]/route.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { NextRequest, NextResponse } from 'next/server';
import { getResponseByID } from '@/lib/firebase/database/response';
import { Response } from '@/types/survey-types';

export async function GET(req: NextRequest, { params }: { params: { responseId: string } }) {
const { responseId } = params;
console.log('responseId:', responseId);

try {
const response: Response | null = await getResponseByID(responseId);
if (response) {
return NextResponse.json(response, { status: 200 });
} else {
return NextResponse.json({ message: 'Response not found' }, { status: 404 });
}
} catch (error) {
console.error('Error getting response by ID:', error);
return NextResponse.json({ message: 'Internal Server Error' }, { status: 500 });
}
}

26 changes: 26 additions & 0 deletions src/app/api/responses/route.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// pages/route.tsx

import { NextRequest, NextResponse } from 'next/server';
import { getAllResponses, createResponse } from '@/lib/firebase/database/response';
import { Response } from '@/types/survey-types';

export async function GET(req: NextRequest) {
try {
const allResponses = await getAllResponses();
return NextResponse.json(allResponses, { status: 200 });
} catch (error) {
console.error('Error getting responses:', error);
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
}
}

export async function POST(req: NextRequest) {
try {
const newResponse: Response = await req.json();
await createResponse(newResponse);
return NextResponse.json({ message: 'Response created successfully' }, { status: 201 });
} catch (error) {
console.error('Error creating response:', error);
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
}
}
40 changes: 40 additions & 0 deletions src/lib/firebase/database/response.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { db } from "../firebaseConfig";
import { collection, getDocs, getDoc, doc, setDoc } from 'firebase/firestore';
import { Response } from '@/types/survey-types';

// GET all responses
export async function getAllResponses() {
try {
const responsesSnapshot = await getDocs(collection(db, 'responses'));
const allResponses: Response[] = [];
responsesSnapshot.forEach((doc) => {
allResponses.push(doc.data() as Response);
});
return allResponses;
} catch (error) {
console.error('Error getting responses:', error);
throw new Error('unable to get responses');
}
}

export async function createResponse(newResponse: Response) {
try {
await setDoc(doc(db, 'responses', newResponse.responseId), newResponse);
} catch (error) {
console.error('Error creating response:', error);
throw new Error('unable to create response');
}
}
export async function getResponseByID(responseId: string): Promise<Response | null> {
try {
const responseDoc = await getDoc(doc(db, 'responses', responseId));
if (responseDoc.exists()) {
return responseDoc.data() as Response;
} else {
return null;
}
} catch (error) {
console.error('Error getting response by ID:', error);
throw new Error('unable to get response by id');
}
}

0 comments on commit 8188bd7

Please sign in to comment.