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

feat: log with server actions #52

Merged
merged 4 commits into from
Aug 26, 2024
Merged
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
4 changes: 2 additions & 2 deletions apps/bottle/src/app/bottles/[...slug]/ActionButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ interface Props {

export function ActionButtons({ type, id }: Props) {
const { mutate: accept } = useAcceptBottleMutation(type, id);
const { mutate: refuse } = useRefuseBottleMutation();
const { mutate: refuse } = useRefuseBottleMutation(id);

const handleRightClick =
type === 'random'
Expand All @@ -33,7 +33,7 @@ export function ActionButtons({ type, id }: Props) {
return (
<FixedButton
variant="two"
left={<CTAButton.Left onClick={() => refuse(id)}>떠내려 보내기</CTAButton.Left>}
left={<CTAButton.Left onClick={() => refuse()}>떠내려 보내기</CTAButton.Left>}
right={
<CTAButton.Right onClick={handleRightClick}>
{type === 'random' ? '호감 표현하기' : '문답 시작하기'}
Expand Down
2 changes: 1 addition & 1 deletion apps/bottle/src/app/bottles/_components/Top.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ReactNode } from 'react';
import { useUserInfoQuery } from '../../../store/query/useNameQuery';
import { useUserInfoQuery } from '../../../store/query/useUserInfoQuery';
import { titleStyle } from './topStyle.css';

interface Props {
Expand Down
2 changes: 1 addition & 1 deletion apps/bottle/src/app/bottles/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { getServerSideTokens } from '@/features/server/serverSideTokens';
import { Suspense } from 'react';
import { ServerFetchBoundary } from '../../store/query/ServerFetchBoundary';
import { bottlesQueryOptions } from '../../store/query/useBottlesQuery';
import { userInfoQueryOptions } from '../../store/query/useNameQuery';
import { userInfoQueryOptions } from '../../store/query/useUserInfoQuery';
import { Bottles } from './Bottles';

export default function BottlesPage() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { StepProvider } from '@/features/steps/StepProvider';
import { userInfoQueryOptions } from '@/store/query/useNameQuery';
import { userInfoQueryOptions } from '@/store/query/useUserInfoQuery';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { render } from '@testing-library/react';
import { CreateProfileProvider } from '../../CreateProfileProvider';
Expand Down
2 changes: 1 addition & 1 deletion apps/bottle/src/app/create-profile/_steps/MBTI/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Control, toggle } from '@/components/control';
import { Step } from '@/features/steps/StepContainer';
import { useStep } from '@/features/steps/StepProvider';
import { EIType, JPType, SNType, TFType } from '@/models/profile/MBTI';
import { useUserInfoQuery } from '@/store/query/useNameQuery';
import { useUserInfoQuery } from '@/store/query/useUserInfoQuery';
import { Button, ButtonProps } from '@bottlesteam/ui';
import { useMemo, useState } from 'react';
import { useCreateProfileValues } from '../../CreateProfileProvider';
Expand Down
2 changes: 1 addition & 1 deletion apps/bottle/src/app/create-profile/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { getServerSideTokens } from '@/features/server/serverSideTokens';
import { StepProvider } from '@/features/steps/StepProvider';
import { ServerFetchBoundary } from '@/store/query/ServerFetchBoundary';
import { userInfoQueryOptions } from '@/store/query/useNameQuery';
import { userInfoQueryOptions } from '@/store/query/useUserInfoQuery';
import { regionsQueryOptions } from '@/store/query/useRegionsQuery';
import { ReactNode, Suspense } from 'react';

Expand Down
5 changes: 5 additions & 0 deletions apps/bottle/src/features/server/log.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use server';

export async function logAction(message: string): Promise<void> {
console.log('[LOG]:', message);
}
13 changes: 12 additions & 1 deletion apps/bottle/src/store/mutation/useAcceptBottleMutation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
import { getCookie } from 'cookies-next';
import { useRouter } from 'next/navigation';
import { bottlesQueryOptions } from '../query/useBottlesQuery';
import { logAction } from '@/features/server/log';
import { bottleDetailQueryOptions } from '../query/useBottleDetailQuery';
import { userInfoQueryOptions } from '../query/useUserInfoQuery';

interface AcceptBottleBody<T extends BottleType> {
likeMessage: T extends 'random' ? string : null;
Expand All @@ -16,6 +19,13 @@ export function useAcceptBottleMutation<T extends BottleType>(type: T, id: Bottl
const router = useRouter();
const { send } = useAppBridge();
const queryClient = useQueryClient();
const tokens = getClientSideTokens();

async function logAcceptBottleAction() {
const { name: currentUserName } = await queryClient.ensureQueryData(userInfoQueryOptions(tokens));
const { userName: senderName } = await queryClient.ensureQueryData(bottleDetailQueryOptions(tokens, id));
await logAction(`${currentUserName} ACCEPTED ${senderName}`);
}

return useMutation({
mutationFn: (likeMessage: string | null) =>
Expand All @@ -24,14 +34,15 @@ export function useAcceptBottleMutation<T extends BottleType>(type: T, id: Bottl
getClientSideTokens(),
createInit(getCookie('accessToken') ?? '', { likeMessage })
),
onSuccess: () => {
onSuccess: async () => {
queryClient.invalidateQueries({ queryKey: bottlesQueryOptions(getClientSideTokens()).queryKey });
if (type === 'random') {
send({ type: AppBridgeMessageType.TOAST_OPEN, payload: { message: '호감을 보냈어요' } });
router.back();
return;
}
send({ type: AppBridgeMessageType.BOTTLE_ACCEPT });
await logAcceptBottleAction();
},
});
}
18 changes: 14 additions & 4 deletions apps/bottle/src/store/mutation/useRefuseBottleMutation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,32 @@ import { AppBridgeMessageType, useAppBridge } from '@/features/app-bridge';
import { POST, createInit } from '@/features/server';
import { getClientSideTokens } from '@/features/server/clientSideTokens';
import { Bottle } from '@/models/bottle';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { QueryClient, useMutation, useQueryClient } from '@tanstack/react-query';
import { useRouter } from 'next/navigation';
import { bottlesQueryOptions } from '../query/useBottlesQuery';
import { logAction } from '@/features/server/log';
import { userInfoQueryOptions } from '../query/useUserInfoQuery';
import { bottleDetailQueryOptions } from '../query/useBottleDetailQuery';

export function useRefuseBottleMutation() {
export function useRefuseBottleMutation(id: Bottle['id']) {
const router = useRouter();
const { send } = useAppBridge();
const queryClient = useQueryClient();

const tokens = getClientSideTokens();

async function logRefuseBottleAction() {
const { name: currentUserName } = await queryClient.ensureQueryData(userInfoQueryOptions(tokens));
const { userName: senderName } = await queryClient.ensureQueryData(bottleDetailQueryOptions(tokens, id));
await logAction(`${currentUserName} REFUSED ${senderName}`);
}

return useMutation({
mutationFn: (id: Bottle['id']) => POST(`/api/v1/bottles/${id}/refuse`, tokens, createInit(tokens.accessToken)),
onSuccess: () => {
mutationFn: () => POST(`/api/v1/bottles/${id}/refuse`, tokens, createInit(tokens.accessToken)),
onSuccess: async () => {
queryClient.invalidateQueries({ queryKey: bottlesQueryOptions(tokens).queryKey });
send({ type: AppBridgeMessageType.TOAST_OPEN, payload: { message: '보틀을 떠내려 보냈어요' } });
await logRefuseBottleAction();
router.back();
},
});
Expand Down
4 changes: 0 additions & 4 deletions apps/bottle/src/store/query/ServerFetchBoundary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,5 @@ export async function ServerFetchBoundary({ fetchOptions, children }: Props) {
await queryClient.fetchQuery(fetchOptions);
}

// Array.isArray(fetchOptions)
// ? await Promise.all(fetchOptions.map(prefetchOption => queryClient.prefetchQuery(prefetchOption)))
// : await queryClient.prefetchQuery(fetchOptions);

return <HydrationBoundary state={dehydrate(queryClient)}>{children}</HydrationBoundary>;
}
2 changes: 1 addition & 1 deletion apps/bottle/src/store/query/useMyInformation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { CurrentUser } from '@/models/user';
import { UseSuspenseQueryOptions, useSuspenseQuery } from '@tanstack/react-query';

export const myInformationQueryOptions = (tokens: Tokens): UseSuspenseQueryOptions<CurrentUser> => ({
queryKey: ['bottles'],
queryKey: ['my'],
queryFn: () => GET<CurrentUser>(`/api/v1/profile`, tokens, createInit(tokens.accessToken)),
});
export function useMyInformationQuery() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ export interface GetUserInfoData {
}

export const userInfoQueryOptions = (tokens: Tokens): UseSuspenseQueryOptions<GetUserInfoData> => ({
queryKey: ['userInfo'],
queryFn: () => GET<GetUserInfoData>(`/api/v1/profile/info`, tokens, createInit(tokens.accessToken)),
queryKey: ['user-info'],
queryFn: async () => {
const userInfo = await GET<GetUserInfoData>(`/api/v1/profile/info`, tokens, createInit(tokens.accessToken));
console.log('CURRENT USER:', userInfo.name);
return userInfo;
},
});
export function useUserInfoQuery() {
return useSuspenseQuery(userInfoQueryOptions(getClientSideTokens()));
Expand Down
Loading