Skip to content

Commit

Permalink
KeepMemo (#444)
Browse files Browse the repository at this point in the history
<!--変更したい場合は、`/.github/pull_request_template.md` を修正して下さい。-->
# PRの概要

オートマッチの機能を作った。後々には運営アカウントのチャットを作ったり、問い合わせ機能の移管などができる。

<!-- 変更の目的 もしくは 関連する Issue 番号 -->
<!-- 以下のように書くと Issue にリンクでき、マージ時に自動で Issue を閉じられる-->
<!-- closes #1 -->
closes #418 

## 具体的な変更内容
<!-- ビューの変更がある場合はスクショによる比較などがあるとわかりやすい -->

## 影響範囲
<!-- この関数を変更したのでこの機能にも影響がある、など -->

## 動作要件
<!-- 動作に必要な 環境変数 / 依存関係 / DBの更新 など -->
DBにID=0の"Keepメモ"を作ってください。
いらすとやの

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvpbYflYCwbG_c11ADWhZUaf93zrtmvYYjSvY4NNxcF4Ri-XO6jiFZq-1InXfcxBjTD9_8jQntvnzML5F0geA04H9etzy3dcZ7SaqpbfKX4PmFgg8nplhaSLBCWo6zOIwq-jJc9tjrXxKV/s1600/bunbougu_memo.png
をpictureUrlに用いるのがおすすめ
## 補足
<!-- レビューをする際に見てほしい点、ローカル環境で試す際の注意点、など -->

## レビューリクエストを出す前にチェック!

- [ ] 改めてセルフレビューしたか
- [ ] 手動での動作検証を行ったか
- [ ] server の機能追加ならば、テストを書いたか
  - 理由: 書いた | server の機能追加ではない
- [ ] 間違った使い方が存在するならば、それのドキュメントをコメントで書いたか
  - 理由: 書いた | 間違った使い方は存在しない
- [ ] わかりやすいPRになっているか

<!-- レビューリクエスト後は、Slackでもメンションしてお願いすることを推奨します。 -->

---------

Co-authored-by: KaichiManabe <[email protected]>
  • Loading branch information
RRRyoma and KaichiManabe authored Dec 2, 2024
1 parent 7a845bb commit 84a13ab
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 13 deletions.
16 changes: 16 additions & 0 deletions server/src/database/requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,3 +183,19 @@ export async function getMatchedUser(userId: UserID): Promise<Result<User[]>> {
return Err(e);
}
}

export async function matchWithMemo(userId: UserID) {
try {
const result = await prisma.relationship.create({
data: {
status: "MATCHED",
sendingUserId: userId,
receivingUserId: 0, //KeepメモのUserId
},
});

return result;
} catch (error) {
return Err(error);
}
}
15 changes: 13 additions & 2 deletions server/src/router/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import express, { type Request, type Response } from "express";
import {
getPendingRequestsFromUser,
getPendingRequestsToUser,
matchWithMemo,
} from "../database/requests";
import {
createUser,
Expand Down Expand Up @@ -124,10 +125,20 @@ router.get("/id/:id", async (req: Request, res: Response) => {
// INSERT INTO "User" VALUES (body...)
router.post("/", async (req: Request, res: Response) => {
const partialUser = InitUserSchema.safeParse(req.body);
if (!partialUser.success) return res.status(400).send("invalid format");
if (!partialUser.success)
return res.status(400).send({
error: "Invalid input format",
details: partialUser.error.errors,
});

const user = await createUser(partialUser.data);
if (!user.ok) return res.status(500).send();
if (!user.ok) return res.status(500).send({ error: "Failed to create user" });

//ユーザー作成と同時にメモとマッチング
const result = await matchWithMemo(user.value.id);
if ("ok" in result && !result.ok) {
return res.status(500).send({ error: "Failed to match user with memo" });
}
res.status(201).json(user.value);
});

Expand Down
29 changes: 18 additions & 11 deletions web/components/match/matching.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,24 @@ export default function Matchings() {
<p className="text-red-500">Error: {error.message}</p>
) : (
<ul className="mt-4 space-y-4">
{data?.map((matchedUser) => (
<HumanListItem
key={matchedUser.id}
id={matchedUser.id}
name={matchedUser.name}
pictureUrl={matchedUser.pictureUrl}
onOpen={() => openModal(matchedUser)}
onDelete={() => deleteMatch(matchedUser.id).then(() => reload())}
hasDots
/>
))}
{data?.map((matchedUser) =>
matchedUser.id === 0 ? (
//メモ帳
<div key={0} />
) : (
<HumanListItem
key={matchedUser.id}
id={matchedUser.id}
name={matchedUser.name}
pictureUrl={matchedUser.pictureUrl}
onOpen={() => openModal(matchedUser)}
onDelete={() =>
deleteMatch(matchedUser.id).then(() => reload())
}
hasDots
/>
),
)}
</ul>
)}
</div>
Expand Down

0 comments on commit 84a13ab

Please sign in to comment.