aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/service
diff options
context:
space:
mode:
Diffstat (limited to 'src/service')
-rw-r--r--src/service/friend.ts52
-rw-r--r--src/service/transaction.ts16
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
}