Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #148

Merged
merged 39 commits into from
Feb 22, 2025
Merged
Changes from 1 commit
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
9175697
プロフィールにいろいろ
natanata25 Feb 21, 2025
4bc4650
Merge branch 'develop' of https://github.com/kc3hack/2025_10 into Pro…
natanata25 Feb 21, 2025
084654a
Lottie動かない問題
RAIT-09 Feb 21, 2025
6903520
サイドメニューから設定削除
RAIT-09 Feb 21, 2025
a1b1c89
システムプロンプト修正 拗音(ゃゅょ)は1音として扱わない
yone-al Feb 21, 2025
5943272
ニュースを取得する関数
yone-al Feb 22, 2025
49fd775
Tankalizerロゴクリックでタイムライン遷移
RAIT-09 Feb 22, 2025
74e9a6f
詠ボタンをタイムライン以外にも表示
RAIT-09 Feb 22, 2025
67e2b51
getOnePost APIの追加
TARO-gh Feb 22, 2025
a24e975
Merge remote-tracking branch 'origin/taro/develop' into RAIT-09/featu…
RAIT-09 Feb 22, 2025
4777fb9
Merge remote-tracking branch 'origin/taro/develop' into RAIT-09/featu…
RAIT-09 Feb 22, 2025
be920fd
getOnePost APIの修正
TARO-gh Feb 22, 2025
9ea90e1
Merge remote-tracking branch 'origin/taro/develop' into RAIT-09/featu…
RAIT-09 Feb 22, 2025
9313232
NewsのAPI(仮)をdocsに追加
yone-al Feb 22, 2025
0cbc101
共有機能フロント
RAIT-09 Feb 22, 2025
a5bf07a
env example追加
ABfry Feb 22, 2025
c9e53f8
大きさ変更に対応
natanata25 Feb 22, 2025
97d3289
投稿取得中表示とハンバーガー戻し
RAIT-09 Feb 22, 2025
b46bbc2
Merge pull request #141 from kc3hack/RAIT-09/feature/postpage
RAIT-09 Feb 22, 2025
2b55c49
Merge branch 'develop' of https://github.com/kc3hack/2025_10 into Pro…
natanata25 Feb 22, 2025
a63ee3d
news投稿
ABfry Feb 22, 2025
957320a
Merge pull request #142 from kc3hack/Profilr_UI
natanata25 Feb 22, 2025
b5b862f
私たちのアカウントか判定
TARO-gh Feb 22, 2025
c84dec2
Merge pull request #143 from kc3hack/taro/develop
TARO-gh Feb 22, 2025
773ee73
動的ルーティングNotFound一旦対応
RAIT-09 Feb 22, 2025
4ca2589
投稿単独ページで投稿を削除した場合にタイムラインに遷移
RAIT-09 Feb 22, 2025
707a9cd
Merge branch 'develop' into RAIT-09/develop
RAIT-09 Feb 22, 2025
51f21b5
スキーマ例修正
yone-al Feb 22, 2025
17a8c36
Revert "スキーマ例修正"
yone-al Feb 22, 2025
276ab71
スキーマ例修正
yone-al Feb 22, 2025
b9afe3b
NEWS_USER_ICON環境変数
yone-al Feb 22, 2025
fd9a508
NEWS_USER_ICONー>NEWS_USER_ID
yone-al Feb 22, 2025
5fb7e7e
動的ルーティングページのNotFound改善
RAIT-09 Feb 22, 2025
8480708
Merge branch 'develop' into yone/develop
yone-al Feb 22, 2025
3b2af87
動的ルーティングページのNotFound改善
RAIT-09 Feb 22, 2025
a254154
帽子追加
natanata25 Feb 22, 2025
fe69cb0
Merge pull request #147 from kc3hack/Profilr_UI
ABfry Feb 22, 2025
4c94349
Merge pull request #146 from kc3hack/RAIT-09/develop
ABfry Feb 22, 2025
cfe3f21
Merge pull request #140 from kc3hack/yone/develop
ABfry Feb 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
getOnePost APIの追加
共有機能用
TARO-gh committed Feb 22, 2025
commit 67e2b51a7d965ef37db4ead99c4350d940a09423
94 changes: 94 additions & 0 deletions backend/src/controllers/Post/getOnePostHandler.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import { z, type RouteHandler } from '@hono/zod-openapi';
import type { Context } from 'hono';
import db from '../db.js';
import { getOnePostSchema } from '../../schema/Post/getOnePostSchema.js';
import type { getOnePostRoute } from '../../routes/Post/getOnePostRoute.js';
import { env } from '../../config/env.js';

type getOnePostSchema = z.infer<typeof getOnePostSchema>;

const getOnePostHandler: RouteHandler<typeof getOnePostRoute, {}> = async (c: Context) => {
try {
// 受け取ったjsonを各変数に格納 (post_idが指定なしなら,最新の投稿idになる)
let { my_icon = null, post_id } = await c.req.json<getOnePostSchema>();

// 入力のpost_idがnullなら最新の投稿から取得,そうでなければその投稿よりも古いものを取得
// sql文中の比較条件切り替え

// 投稿が存在するかチェック
const checkSql = `SELECT * FROM ${env.POSTS_TABLE_NAME} WHERE id = :post_id;`;
const existingPosts = await db.query(checkSql, { post_id });
if (existingPosts.length == 0) {
console.log('投稿が見つかりません.');
return c.json(
{
message: '投稿が見つかりません.',
statusCode: 404,
error: 'Not Found',
},
404
);
}

let results;
// ここからDBのpostテーブルから情報取得
const sql = `
SELECT
post.id,
post.original,
post.tanka,
post.image_path,
post.created_at,
post.user_name,
post.user_icon,
(SELECT COUNT(*) FROM ${env.MIYABI_TABLE_NAME} WHERE post_id = post.id) as miyabi_count,
CASE WHEN miyabi.id IS NULL THEN false ELSE true END as is_miyabi
FROM ${env.POSTS_TABLE_NAME} post
LEFT JOIN ${env.MIYABI_TABLE_NAME} miyabi
ON post.id = miyabi.post_id AND miyabi.user_icon = :my_icon
WHERE post.id = :post_id;
`;

results = await db.query(sql, { my_icon, post_id });

// is_miyabiをtrue or falseで返すための処理
results = results.map((row: any) => ({
...row,
user_id: row.user_icon.match(/\/u\/(\d+)/)[1],
is_miyabi: row.is_miyabi ? true : false,
}));

//console.log(results);

// レスポンス
console.log('投稿を取得しました.');
return c.json(
{
message: '投稿を取得しました.',
id: results[0].id,
original: results[0].original,
tanka: results[0].tanka,
image_path: results[0].image_path,
created_at: results[0].created_at,
user_id: results[0].user_icon,
user_name: results[0].user_name,
user_icon: results[0].user_icon,
miyabi_count: results[0].miyabi_count,
is_miyabi: results[0].is_miyabi,
},
200
);
} catch (err) {
console.log('投稿の取得に失敗しました.' + err);
return c.json(
{
message: '投稿の取得に失敗しました.',
statusCode: 500,
error: 'Internal Server Error',
},
500
);
}
};

export default getOnePostHandler;
67 changes: 67 additions & 0 deletions backend/src/routes/Post/getOnePostRoute.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { z } from '@hono/zod-openapi';
import { createRoute } from '@hono/zod-openapi';
import { getOnePostSchema, getOnePostResponseSchema } from '../../schema/Post/getOnePostSchema.js';

type getOnePostSchema = z.infer<typeof getOnePostSchema>;

const errorResponseSchema = z.object({
message: z.string(),
statusCode: z.number(),
error: z.string(),
});

export const getOnePostRoute = createRoute({
method: 'post',
path: '/share',
tags: ['Post'],
request: {
body: {
required: true,
content: {
'application/json': {
schema: getOnePostSchema,
},
},
},
},
responses: {
200: {
content: {
'application/json': {
schema: getOnePostResponseSchema,
},
},
description: 'Successful response',
},
404: {
content: {
'application/json': {
schema: errorResponseSchema,
},
},
description: 'Not Found',
},
500: {
content: {
'application/json': {
schema: errorResponseSchema,
},
},
description: 'Internal Server Error response',
},
},
});

export type getOnePostRouteResponse200 = z.infer<
(typeof getOnePostRoute.responses)['200']['content']['application/json']['schema']
>;

export type getOnePostRouteResponse404 = z.infer<
(typeof getOnePostRoute.responses)['404']['content']['application/json']['schema']
>;

export type getOnePostRouteResponse500 = z.infer<
(typeof getOnePostRoute.responses)['500']['content']['application/json']['schema']
>;

export type getOnePostRouteResponseError = z.infer<typeof errorResponseSchema>;
3 changes: 3 additions & 0 deletions backend/src/routes/route.ts
Original file line number Diff line number Diff line change
@@ -7,6 +7,8 @@ import { deletePostRoute } from './Post/deletePostRoute.js';
import deletePostHandler from '../controllers/Post/deletePostHandler.js';
import { getPostRoute } from './Post/getPostRoute.js';
import getPostHandler from '../controllers/Post/getPostHandler.js';
import { getOnePostRoute } from './Post/getOnePostRoute.js';
import getOnePostHandler from '../controllers/Post/getOnePostHandler.js';
import { createMiyabiRoute } from './Miyabi/createMiyabiRoute.js';
import createMiyabiHandler from '../controllers/Miyabi/createMiyabiHandler.js';
import { deleteMiyabiRoute } from './Miyabi/deleteMiyabiRoute.js';
@@ -33,6 +35,7 @@ export default router
.openapi(createPostRoute, createPostHandler)
.openapi(deletePostRoute, deletePostHandler)
.openapi(getPostRoute, getPostHandler)
.openapi(getOnePostRoute, getOnePostHandler)
.openapi(createMiyabiRoute, createMiyabiHandler)
.openapi(deleteMiyabiRoute, deleteMiyabiHandler)
.openapi(getMiyabiRankingRoute, getMiyabiRankingHandler)
28 changes: 28 additions & 0 deletions backend/src/schema/Post/getOnePostSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { z } from '@hono/zod-openapi';

// リクエストの型
export const getOnePostSchema = z.object({
my_icon: z.string().optional().openapi({
example: 'https://avatars.githubusercontent.com/u/131171129?v=4',
description: 'git hubのアイコンURL',
}),
post_id: z.string().openapi({
example: 'cb3adc47-eba3-11ef-9ce7-0242ac130002',
description: '投稿id',
}),
});

// レスポンスの型
export const getOnePostResponseSchema = z.object({
message: z.string(),
id: z.string(),
original: z.string(),
tanka: z.array(z.string()),
image_path: z.string(),
created_at: z.string(),
user_id: z.string(),
user_name: z.string(),
user_icon: z.string(),
miyabi_count: z.number(),
is_miyabi: z.boolean(),
});