Skip to content

Commit

Permalink
feat: log with server actions
Browse files Browse the repository at this point in the history
  • Loading branch information
stakbucks committed Aug 26, 2024
1 parent d21e555 commit 24f4134
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 16 deletions.
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
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

0 comments on commit 24f4134

Please sign in to comment.