get all accessible recipes
This commit is contained in:
@@ -29,7 +29,9 @@ export default class RecipeCtl {
|
|||||||
|
|
||||||
async getAllAccessible(id: string) {
|
async getAllAccessible(id: string) {
|
||||||
try {
|
try {
|
||||||
|
const result = await RecipeInstance.getAllAccessible(id);
|
||||||
|
const code = result !== null ? StatusCode.OK : StatusCode.NotFound;
|
||||||
|
return new ControllerResponse(code, (result || "No recipes currently accessible"));
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
throw new Error(e);
|
throw new Error(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ export default class UserCtl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getPendingFriendRequests(senderid: string | number) {
|
async getPendingFriendRequests(recipient: string | number) {
|
||||||
try {
|
try {
|
||||||
const { ok, code, result } = await UserInstance.getPendingFriendRequests(senderid);
|
const { ok, code, result } = await UserInstance.getPendingFriendRequests(recipient);
|
||||||
return new ControllerResponse(code, result);
|
return new ControllerResponse(code, result);
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
throw new Error(e);
|
throw new Error(e);
|
||||||
@@ -102,7 +102,7 @@ export default class UserCtl {
|
|||||||
|
|
||||||
async updateFriendship(id: number | string, userid: number | string, data: { active: boolean, pending: boolean, dateterminated?: string }) {
|
async updateFriendship(id: number | string, userid: number | string, data: { active: boolean, pending: boolean, dateterminated?: string }) {
|
||||||
try {
|
try {
|
||||||
const { ok, code, result } = await UserInstance.updateFriendship(id, userid, data);
|
const { code, result } = await UserInstance.updateFriendship(id, userid, data);
|
||||||
return new ControllerResponse(code, result);
|
return new ControllerResponse(code, result);
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
throw new Error(e);
|
throw new Error(e);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export default async function populate() {
|
|||||||
INSERT INTO recipin.appusers
|
INSERT INTO recipin.appusers
|
||||||
(firstname, lastname, handle, email, password, active, isadmin, datecreated, datemodified)
|
(firstname, lastname, handle, email, password, active, isadmin, datecreated, datemodified)
|
||||||
VALUES
|
VALUES
|
||||||
('Mikayla', 'Dobson', 'innocuoussymmetry', 'mikaylaherself@gmail.com', 'password1', true, true, $1, $1),
|
('Mikayla', 'Dobson', 'innocuoussymmetry', 'mikaylaherself@gmail.com', '$2a$10$T9..JhNxfha86mQZNrwFo.CW7sR.d7w.9.T1M32aXL6r3vE2B.GhS', true, true, $1, $1),
|
||||||
('Emily', 'Dobson', 'emjdobson', 'emily@email.com', 'password2', true, false, $1, $1),
|
('Emily', 'Dobson', 'emjdobson', 'emily@email.com', 'password2', true, false, $1, $1),
|
||||||
('Montanna', 'Dobson', 'delayedlemon', 'montanna@email.com', 'password3', true, false, $1, $1),
|
('Montanna', 'Dobson', 'delayedlemon', 'montanna@email.com', 'password3', true, false, $1, $1),
|
||||||
('Christine', 'Riley', 'christine', 'christine@email.com', 'password4', true, false, $1, $1),
|
('Christine', 'Riley', 'christine', 'christine@email.com', 'password4', true, false, $1, $1),
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
SELECT * FROM recipin.recipe
|
||||||
|
WHERE authoruserid = $1
|
||||||
|
OR authoruserid IN (
|
||||||
|
SELECT targetid FROM recipin.cmp_userfriendships
|
||||||
|
WHERE senderid = $1
|
||||||
|
UNION
|
||||||
|
SELECT senderid FROM recipin.cmp_userfriendships
|
||||||
|
WHERE targetid =$ 1
|
||||||
|
);
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { IRecipe } from "../schemas";
|
import { IRecipe } from "../schemas";
|
||||||
|
import fs from 'fs';
|
||||||
import pool from "../db";
|
import pool from "../db";
|
||||||
import { CollectionCtl } from "../controllers";
|
import { CollectionCtl } from "../controllers";
|
||||||
import now from "../util/now";
|
import now from "../util/now";
|
||||||
@@ -30,7 +31,24 @@ export class Recipe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getAllAccessible(id: string) {
|
async getAllAccessible(id: string) {
|
||||||
|
try {
|
||||||
|
const statement = `
|
||||||
|
SELECT * FROM recipin.recipe
|
||||||
|
WHERE authoruserid = $1
|
||||||
|
OR authoruserid IN (
|
||||||
|
SELECT targetid FROM recipin.cmp_userfriendships
|
||||||
|
WHERE senderid = $1
|
||||||
|
UNION
|
||||||
|
SELECT senderid FROM recipin.cmp_userfriendships
|
||||||
|
WHERE targetid = $1
|
||||||
|
);
|
||||||
|
`
|
||||||
|
const result = await pool.query(statement, [id]);
|
||||||
|
if (result.rows.length) return result.rows;
|
||||||
|
return null;
|
||||||
|
} catch (e: any) {
|
||||||
|
throw new Error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fetchRecipesByCollection(collectionid: string) {
|
async fetchRecipesByCollection(collectionid: string) {
|
||||||
|
|||||||
@@ -128,10 +128,10 @@ export class User {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getPendingFriendRequests(senderid: number | string) {
|
async getPendingFriendRequests(recipient: number | string) {
|
||||||
try {
|
try {
|
||||||
const statement = `SELECT * FROM recipin.cmp_userfriendships WHERE pending = true AND senderid = $1`
|
const statement = `SELECT * FROM recipin.cmp_userfriendships WHERE pending = true AND targetid = $1`
|
||||||
const result = await pool.query(statement, [senderid]);
|
const result = await pool.query(statement, [recipient]);
|
||||||
|
|
||||||
if (result.rows.length) return { ok: true, code: StatusCode.OK, result: result.rows }
|
if (result.rows.length) return { ok: true, code: StatusCode.OK, result: result.rows }
|
||||||
return { ok: true, code: StatusCode.NotFound, result: "No pending friend requests found" }
|
return { ok: true, code: StatusCode.NotFound, result: "No pending friend requests found" }
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export const authRoute = (app: Express, passport: PassportStatic) => {
|
|||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
})
|
})
|
||||||
res.clearCookie('userid');
|
res.clearCookie('userid');
|
||||||
res.status(204).redirect('/');
|
res.status(204).send({ ok: true });
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
next(e);
|
next(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,16 @@ export const friendRouter = (app: Express) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// update a friendship by its id
|
/**
|
||||||
|
* Update friendship by friendship ID
|
||||||
|
* allows user who received a friend request to confirm it
|
||||||
|
* expects body schema of:
|
||||||
|
* active: boolean
|
||||||
|
* pending: boolean
|
||||||
|
* dateterminated: string | null
|
||||||
|
* receives friendship ID from req.params and checks
|
||||||
|
* against current user ID from session
|
||||||
|
*/
|
||||||
router.put('/:id', async (req, res, next) => {
|
router.put('/:id', async (req, res, next) => {
|
||||||
const data = req.body;
|
const data = req.body;
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
|
|||||||
@@ -12,15 +12,13 @@ import { cuisineRouter } from "./cuisine";
|
|||||||
import { courseRouter } from "./course";
|
import { courseRouter } from "./course";
|
||||||
|
|
||||||
export const routes = async (app: Express, passport: PassportStatic) => {
|
export const routes = async (app: Express, passport: PassportStatic) => {
|
||||||
console.log('routes called');
|
|
||||||
|
|
||||||
authRoute(app, passport);
|
|
||||||
userRoute(app);
|
userRoute(app);
|
||||||
friendRouter(app);
|
friendRouter(app);
|
||||||
recipeRoute(app);
|
recipeRoute(app);
|
||||||
ingredientRoute(app);
|
ingredientRoute(app);
|
||||||
|
|
||||||
// to do: refactor for ctlresponse
|
// to do: refactor for ctlresponse
|
||||||
|
authRoute(app, passport);
|
||||||
collectionRoute(app);
|
collectionRoute(app);
|
||||||
subscriptionRoute(app);
|
subscriptionRoute(app);
|
||||||
groceryListRoute(app);
|
groceryListRoute(app);
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ export const recipeRoute = (app: Express) => {
|
|||||||
try {
|
try {
|
||||||
let result: CtlResponse<IRecipe[] | string>;
|
let result: CtlResponse<IRecipe[] | string>;
|
||||||
switch (filterby) {
|
switch (filterby) {
|
||||||
case "allaccessible":
|
case "myrecipes":
|
||||||
// result = await recipectl.getAllAccessible(user.id);
|
|
||||||
// break;
|
|
||||||
default:
|
|
||||||
result = await recipectl.getAllAuthored(user.id);
|
result = await recipectl.getAllAuthored(user.id);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
result = await recipectl.getAllAccessible(user.id);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
res.status(result.code).send(result.data);
|
res.status(result.code).send(result.data);
|
||||||
|
|||||||
Reference in New Issue
Block a user