diff options
Diffstat (limited to 'src/service')
| -rw-r--r-- | src/service/friend.ts | 52 | ||||
| -rw-r--r-- | src/service/transaction.ts | 16 |
2 files changed, 61 insertions, 7 deletions
diff --git a/src/service/friend.ts b/src/service/friend.ts index 6986858..1f30760 100644 --- a/src/service/friend.ts +++ b/src/service/friend.ts @@ -16,10 +16,11 @@ */ import prisma from "../util/prisma"; +import { readById } from "./user"; const friend = async (userId: Number, friendId: Number) => { - // will return error P2002 if already friends - return prisma.friend.createMany({ + // will throw error P2002 if already friends + await prisma.friend.createMany({ data: [ // @ts-ignore { userId: userId, friendId: friendId }, @@ -28,17 +29,18 @@ const friend = async (userId: Number, friendId: Number) => { { userId: friendId, friendId: userId } ] }) + + return readById(userId); } -const unfriend = async (userId: Number, friendId: Number) => { +const unfriend = (userId: Number, friendId: Number) => { return prisma.friend.deleteMany({ where: { OR: [ // @ts-ignore - { userId: userId }, - + { userId: userId, friendId: friendId }, // @ts-ignore - { userId: friendId }, + { userId: friendId, friendId: userId } ] } }) @@ -63,8 +65,44 @@ const list = async (userId: Number) => { }) } +const get = async (userId: Number, friendId: Number) => { + // Verify that users are friends. Seeing a non-friend's profile isn't allowed + const friendship = await prisma.friend.findFirst({ + // @ts-ignore + where: { + AND: [ + // @ts-ignore + { userId: userId }, + // @ts-ignore + { friendId: friendId }, + ] + } + }) + + if (friendship == null) { + // user isn't friends with them + throw new Error("forbidden"); + } + + const friend = await prisma.user.findUnique({ + // @ts-ignore + where: { id: friendId } + }) + // @ts-ignore + delete friend["password"]; + // @ts-ignore + delete friend["refreshTokenVersion"]; + // @ts-ignore + delete friend["createdAt"]; + // @ts-ignore + delete friend["updatedAt"]; + + return friend; +} + export { friend, unfriend, - list + list, + get }
\ No newline at end of file diff --git a/src/service/transaction.ts b/src/service/transaction.ts index 8f1c99d..c3a2408 100644 --- a/src/service/transaction.ts +++ b/src/service/transaction.ts @@ -42,6 +42,21 @@ const read = async (userId: Number, type: String) => { }) } +const readOne = async (userId: Number, id: Number) => { + const transaction = await prisma.transaction.findUnique({ + // @ts-ignore + where: { id: id }, + }) + + // NOTE: this gon change a bit when there are also collaborators + // @ts-ignore + if (transaction.userId !== userId) { + throw new Error("forbidden") + } + + return transaction +} + // TODO: ig collaborated transactions would need more logic const del = async (userId: Number, transactionId: String) => { const t = await prisma.transaction.findUnique({ @@ -66,5 +81,6 @@ const del = async (userId: Number, transactionId: String) => { export { create, read, + readOne, del } |