diff --git a/api/src/routes/users/@me/notes.ts b/api/src/routes/users/@me/notes.ts
index 96067bf5..4887b191 100644
--- a/api/src/routes/users/@me/notes.ts
+++ b/api/src/routes/users/@me/notes.ts
@@ -1,14 +1,39 @@
import { Request, Response, Router } from "express";
import { route } from "@fosscord/api";
+import { User, emitEvent } from "@fosscord/util";
const router: Router = Router();
+router.get("/:id", route({}), async (req: Request, res: Response) => {
+ const { id } = req.params;
+ const user = await User.findOneOrFail({ where: { id: req.user_id }, select: ["notes"] });
+
+ const note = user.notes[id];
+ return res.json({
+ note: note,
+ note_user_id: id,
+ user_id: user.id,
+ });
+});
+
router.put("/:id", route({}), async (req: Request, res: Response) => {
- //TODO
- res.json({
- message: "Unknown User",
- code: 10013
- }).status(404);
+ const { id } = req.params;
+ const user = await User.findOneOrFail({ where: { id: req.user_id } });
+ const noteUser = await User.findOneOrFail({ where: { id: id }}); //if noted user does not exist throw
+ const { note } = req.body;
+
+ await User.update({ id: req.user_id }, { notes: { ...user.notes, [noteUser.id]: note } });
+
+ await emitEvent({
+ event: "USER_NOTE_UPDATE",
+ data: {
+ note: note,
+ id: noteUser.id
+ },
+ user_id: user.id,
+ })
+
+ return res.status(204);
});
export default router;
diff --git a/util/src/entities/User.ts b/util/src/entities/User.ts
index ed7bd4ce..7091ee24 100644
--- a/util/src/entities/User.ts
+++ b/util/src/entities/User.ts
@@ -164,6 +164,9 @@ export class User extends BaseClass {
@Column({ type: "simple-json", select: false })
settings: UserSettings;
+ @Column({ type: "simple-json" })
+ notes: { [key: string]: string }; //key is ID of user
+
toPublicUser() {
const user: any = {};
PublicUserProjection.forEach((x) => {
@@ -271,6 +274,7 @@ export class User extends BaseClass {
},
settings: { ...defaultSettings, locale: language },
fingerprints: [],
+ notes: {},
});
await user.save();
diff --git a/util/src/interfaces/Event.ts b/util/src/interfaces/Event.ts
index a5253c09..416082ed 100644
--- a/util/src/interfaces/Event.ts
+++ b/util/src/interfaces/Event.ts
@@ -623,6 +623,7 @@ export type EVENT =
| "PRESENCE_UPDATE"
| "TYPING_START"
| "USER_UPDATE"
+ | "USER_NOTE_UPDATE"
| "WEBHOOKS_UPDATE"
| "INTERACTION_CREATE"
| "VOICE_STATE_UPDATE"
|