Skip to content

Commit

Permalink
メッセージ複数行化・同一句を投句不可に
Browse files Browse the repository at this point in the history
  • Loading branch information
hmatsu47 committed Jun 28, 2024
1 parent 32adb69 commit 3722a8a
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 22 deletions.
25 changes: 19 additions & 6 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ export default function Page() {
haiku?: string;
haijin_name?: string;
}>({});
const [message, setMessage] = useState(
"「ITコミュニティのこれまでと、これから」で、一句お願いします"
);
const [message, setMessage] = useState<string[]>([
"「ITコミュニティのこれまでと、これから」",
"をテーマに一句お願いします",
"(17:00締切)",
]);

useEffect(() => {
const storedTalkId = localStorage.getItem("talkId");
Expand All @@ -28,7 +30,11 @@ export default function Page() {

if (storedTalkId) {
setTalkId(Number(storedTalkId));
setMessage("投句いただきました。ありがとうございます!");
setMessage([
"投句ありがとうございます!",
"当選発表をお待ちください!",
"(17時台後半)",
]);
}

if (storedHaiku) {
Expand Down Expand Up @@ -67,7 +73,7 @@ export default function Page() {
const result = await checkWinning(talkId, token);
setMessage(result);
} else {
setMessage("エラーが発生しました再試行してください");
setMessage(["エラーが発生しました", "再試行してください"]);
}
};

Expand All @@ -78,7 +84,14 @@ export default function Page() {
投句箱
</CardHeader>
<CardContent>
<p className="text-center text-gray-600 mb-4">{message}</p>
<p className="text-center text-gray-600 mb-4">
{message.map((line, index) => (
<span key={index}>
{line}
{index < message.length - 1 && <br />}
</span>
))}
</p>
{talkId === null ? (
<FormComponent
haiku={haiku}
Expand Down
60 changes: 44 additions & 16 deletions src/lib/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,37 +55,41 @@ async function getLatestSetting() {

export async function addHaiku(
formData: FormData
): Promise<{ talk_id: number | null; result: string; token: string | null }> {
): Promise<{ talk_id: number | null; result: string[]; token: string | null }> {
const haiku = (formData.get("haiku") as string).trim();
const haijinName = (formData.get("haijin_name") as string).trim();
const token = uuidv4();

if (haiku.length < 6 || haiku.length > 25) {
return {
talk_id: null,
result: "6〜25文字で入力してください",
result: ["6〜25文字で入力してください"],
token: null,
};
}

if (haijinName.length < 1 || haijinName.length > 25) {
return {
talk_id: null,
result: "1〜25文字で入力してください",
result: ["1〜25文字で入力してください"],
token: null,
};
}

const talkOn = await getLatestSetting();
if (talkOn === false) {
return { talk_id: null, result: "投句可能期間は終了しました", token: null };
return {
talk_id: null,
result: ["投句可能期間は終了しました"],
token: null,
};
}

const embedding = await getEmbedding(haiku);
if (embedding === null) {
return {
talk_id: null,
result: "エラーが発生しました再試行してください",
result: ["エラーが発生しました", "再試行してください"],
token: null,
};
}
Expand All @@ -104,12 +108,20 @@ export async function addHaiku(

const totalHandOver = sumResult.rows[0].total_hand_over;

let responseMessage;
let responseMessage: string[];
if (totalHandOver >= GOODS_COUNT) {
responseMessage =
"投句ありがとうございます!17時台後半のLTで当選発表するのでお待ちください";
responseMessage = [
"投句ありがとうございます!",
"当選発表をお待ちください!",
"(17時台後半)",
];
} else {
responseMessage = `投句ありがとうございます!先着${GOODS_COUNT}名様にプレゼントがあります!休憩時間中お早めに受付までお越しください(別途抽選もあります)`;
responseMessage = [
"投句ありがとうございます!",
`先着${GOODS_COUNT}名様にプレゼントがあります!`,
"休憩時間中お早めに受付まで",
"(17:00締切/別途抽選あり)",
];
}

client.release();
Expand All @@ -120,10 +132,18 @@ export async function addHaiku(
token: result.rows[0].token,
};
} catch (error) {
if ((error as any).code === "23505") {
// Unique violation
return {
talk_id: null,
result: ["エラーが発生しました", "同一の句は投句できません"],
token: null,
};
}
console.error("Error inserting haiku:", error);
return {
talk_id: null,
result: "エラーが発生しました投句できませんでした…",
result: ["エラーが発生しました", "投句できませんでした…"],
token: null,
};
}
Expand All @@ -132,10 +152,14 @@ export async function addHaiku(
export async function checkWinning(
talkId: number,
token: string
): Promise<string> {
): Promise<string[]> {
const talkOn = await getLatestSetting();
if (talkOn === true) {
return "まだ抽選が行われていません。当選発表後にクリックしてください";
return [
"まだ抽選が行われていません",
"当選発表をお待ちください!",
"(17時台後半)",
];
}

try {
Expand All @@ -147,18 +171,22 @@ export async function checkWinning(
client.release();

if (result.rowCount !== 1) {
return "エラーが発生しました再試行してください";
return ["エラーが発生しました", "再試行してください"];
}

const winning = result.rows[0].winning;

if (winning === null) {
return "まだ抽選が行われていません。当選発表後にクリックしてください";
return [
"まだ抽選が行われていません",
"当選発表をお待ちください!",
"(17時台後半)",
];
}

return winning;
return [winning];
} catch (error) {
console.error("Error checking winning status:", error);
return "エラーが発生しました再試行してください";
return ["エラーが発生しました", "再試行してください"];
}
}

0 comments on commit 3722a8a

Please sign in to comment.