Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions api/metadata/databases/default/functions/functions.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
- "!include public_create_prize_with_image.yaml"
- "!include public_decrement_latest_reach_log.yaml"
- "!include public_increment_latest_reach_log.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function:
name: create_prize_with_image
schema: public
74 changes: 60 additions & 14 deletions api/migrations/default/1720521696814_auto/up.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,40 @@
SET check_function_bodies = false;
CREATE TABLE public.prizes (
id integer NOT NULL,
is_won boolean DEFAULT false NOT NULL,
image_id integer DEFAULT '-1'::integer NOT NULL,
name_jp text DEFAULT '""'::text NOT NULL,
name_en text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
COMMENT ON TABLE public.prizes IS 'ビンゴの景品データを格納';
COMMENT ON COLUMN public.prizes.is_won IS '当選した景品はTrueになる';
COMMENT ON COLUMN public.prizes.image_id IS 'imagesのidが入る';
COMMENT ON COLUMN public.prizes.name_jp IS '景品の日本語名';
COMMENT ON COLUMN public.prizes.name_en IS '景品の英語名';
CREATE FUNCTION public.create_prize_with_image(p_is_won boolean, p_name_jp text, p_name_en text, p_bucket_name text, p_file_name text, p_file_type text) RETURNS SETOF public.prizes
LANGUAGE plpgsql
AS $$
DECLARE
new_image_id int;
new_prize_id int;
BEGIN
-- images テーブルにレコードを挿入し、挿入したレコードのIDを取得
INSERT INTO public.images(bucket_name, file_name, file_type, created_at, updated_at)
VALUES(p_bucket_name, p_file_name, p_file_type, now(), now())
RETURNING id INTO new_image_id;
-- prizes テーブルにレコードを挿入し、挿入したレコードのIDを取得
INSERT INTO public.prizes(is_won, image_id, name_jp, name_en, created_at, updated_at)
VALUES(p_is_won, new_image_id, p_name_jp, p_name_en, now(), now())
RETURNING id INTO new_prize_id;
-- public.prizes テーブルから、挿入したレコードを返す
RETURN QUERY
SELECT *
FROM public.prizes
WHERE id = new_prize_id;
END;
$$;
CREATE TABLE public.reach_logs (
id integer NOT NULL,
status boolean DEFAULT false NOT NULL,
Expand Down Expand Up @@ -58,6 +94,28 @@ BEGIN
WHERE id = (SELECT id FROM reach_logs ORDER BY created_at DESC LIMIT 1);
END;
$$;
CREATE FUNCTION public.insert_prize_with_image(p_is_won boolean, p_name_jp text, p_name_en text, p_bucket_name text, p_file_name text, p_file_type text) RETURNS SETOF public.prizes
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

消したはずの関数残ってるなんで。。

LANGUAGE plpgsql STABLE
AS $$
DECLARE
new_image_id int;
new_prize_id int;
BEGIN
-- images テーブルにレコードを挿入し、挿入したレコードのIDを取得
INSERT INTO public.images(bucket_name, file_name, file_type, created_at, updated_at)
VALUES(p_bucket_name, p_file_name, p_file_type, now(), now())
RETURNING id INTO new_image_id;
-- prizes テーブルにレコードを挿入し、挿入したレコードのIDを取得
INSERT INTO public.prizes(is_won, image_id, name_jp, name_en, created_at, updated_at)
VALUES(p_is_won, new_image_id, p_name_jp, p_name_en, now(), now())
RETURNING id INTO new_prize_id;
-- public.prizes テーブルから、挿入したレコードを返す
RETURN QUERY
SELECT *
FROM public.prizes
WHERE id = new_prize_id;
END;
$$;
CREATE FUNCTION public.set_current_timestamp_updated_at() RETURNS trigger
LANGUAGE plpgsql
AS $$
Expand Down Expand Up @@ -102,20 +160,6 @@ CREATE SEQUENCE public.numbers_id_seq
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.numbers_id_seq OWNED BY public.numbers.id;
CREATE TABLE public.prizes (
id integer NOT NULL,
is_won boolean DEFAULT false NOT NULL,
image_id integer DEFAULT '-1'::integer NOT NULL,
name_jp text DEFAULT '""'::text NOT NULL,
name_en text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
COMMENT ON TABLE public.prizes IS 'ビンゴの景品データを格納';
COMMENT ON COLUMN public.prizes.is_won IS '当選した景品はTrueになる';
COMMENT ON COLUMN public.prizes.image_id IS 'imagesのidが入る';
COMMENT ON COLUMN public.prizes.name_jp IS '景品の日本語名';
COMMENT ON COLUMN public.prizes.name_en IS '景品の英語名';
CREATE SEQUENCE public.prizes_id_seq
AS integer
START WITH 1
Expand Down Expand Up @@ -153,6 +197,8 @@ ALTER TABLE ONLY public.reach_logs ALTER COLUMN id SET DEFAULT nextval('public.r
ALTER TABLE ONLY public.stamp_triggers ALTER COLUMN id SET DEFAULT nextval('public.stamp_triggers_id_seq'::regclass);
ALTER TABLE ONLY public.images
ADD CONSTRAINT images_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.numbers
ADD CONSTRAINT numbers_number_key UNIQUE (number);
ALTER TABLE ONLY public.numbers
ADD CONSTRAINT numbers_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.prizes
Expand Down
14 changes: 8 additions & 6 deletions view-admin/src/components/common/PrizeResult/PrizeResult.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import type {

interface PrizeResultProps {
prizeResult: GetListPrizesQuery["prizes"];
setBingoPrize: React.Dispatch<
setBingoPrize?: React.Dispatch<
React.SetStateAction<GetListPrizesQuery["prizes"]>
>;
showOverlay: boolean;
Expand Down Expand Up @@ -41,11 +41,13 @@ export const PrizeResult = (props: PrizeResultProps) => {

const handleToggleChange = (id: number, isWon: boolean) => {
updatePrize({ variables: { id: id, isWon: isWon } });
props.setBingoPrize((prev) =>
prev.map((prize) =>
prize.id === id ? { ...prize, isWon: isWon } : prize,
),
);
if (props.setBingoPrize) {
props.setBingoPrize((prev) =>
prev.map((prize) =>
prize.id === id ? { ...prize, isWon: isWon } : prize,
),
);
}
};

return (
Expand Down
27 changes: 27 additions & 0 deletions view-admin/src/gql/prize_with_image.gql
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
mutation CreatePrizeWithImage(
$isWon: Boolean!
$nameJp: String!
$nameEn: String!
$bucketName: String!
$fileName: String!
$fileType: String!
) {
createPrizeWithImage(
args: {
p_is_won: $isWon
p_name_jp: $nameJp
p_name_en: $nameEn
p_bucket_name: $bucketName
p_file_name: $fileName
p_file_type: $fileType
}
) {
id
isWon
imageId
nameJp
nameEn
createdAt
updatedAt
}
}
7 changes: 6 additions & 1 deletion view-admin/src/pages/api/minio.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,12 @@ export default async function handler(
undefined,
metaData,
);
return res.status(200).json({ message: "Upload successful" });
return res.status(200).json({
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここレスポンスで取得できそうだったから返してる

message: "Upload successful",
bucketName,
fileName,
fileType: mimetype,
});
} catch (uploadError) {
return res.status(500).json({ message: uploadError });
}
Expand Down
Loading