Skip to content

Commit

Permalink
Improved the performance of the backend interface.
Browse files Browse the repository at this point in the history
  • Loading branch information
xudaotutou committed Mar 7, 2024
1 parent 83802db commit 07d7ac8
Show file tree
Hide file tree
Showing 27 changed files with 570 additions and 567 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,9 @@ describe('invite member', () => {
targetUserId: payload2.userId,
role
});
console.log(res, ns, payload1);
console.log(res);
console.log(ns)
console.log(payload1)
expect(res.code).toBe(200);
setAuth(token2);
const res2 = await verifyInviteRequest({ action: reciveAction.Accepte, ns_uid });
Expand Down
94 changes: 49 additions & 45 deletions frontend/desktop/src/api/auth.ts
Original file line number Diff line number Diff line change
@@ -1,61 +1,65 @@
import request from '@/services/request';
import {Session} from 'sealos-desktop-sdk';
import {TUserExist} from '@/types/user';
import {ApiResp, Region} from '@/types';
import {AxiosHeaders, AxiosHeaderValue, type AxiosInstance} from 'axios';
import { Session } from 'sealos-desktop-sdk';
import { TUserExist } from '@/types/user';
import { ApiResp, Region } from '@/types';
import { AxiosHeaders, AxiosHeaderValue, type AxiosInstance } from 'axios';
import useSessionStore from '@/stores/session';

export const _getRegionToken = (request: AxiosInstance) => () =>
request.post<any, ApiResp<{ token: string; kubeconfig: string }>>('/api/auth/regionToken');
request.post<any, ApiResp<{ token: string; kubeconfig: string }>>('/api/auth/regionToken');

export const getRegionToken = _getRegionToken(request);
export const _passwordExistRequest = (request: AxiosInstance) => (data: { user: string }) =>
request.post<any, ApiResp<TUserExist>>('/api/auth/password/exist', data);
request.post<any, ApiResp<TUserExist>>('/api/auth/password/exist', data);
export const _passwordLoginRequest =
(request: AxiosInstance, switchAuth: (token: string) => void) =>
(data: { user: string; password: string, inviterId: string | null | undefined } | {
user: string;
password: string
}) =>
request.post<any, ApiResp<{ token: string }>>('/api/auth/password', data).then(
({data}) => {
if (data) {
switchAuth(data.token);
return _getRegionToken(request)();
} else {
return null;
}
},
(err) => Promise.resolve(null)
);
(request: AxiosInstance, switchAuth: (token: string) => void) =>
(
data:
| { user: string; password: string; inviterId: string | null | undefined }
| {
user: string;
password: string;
}
) =>
request.post<any, ApiResp<{ token: string }>>('/api/auth/password', data).then(
({ data }) => {
if (data) {
switchAuth(data.token);
return _getRegionToken(request)();
} else {
return null;
}
},
(err) => Promise.resolve(null)
);
export const _passwordModifyRequest =
(request: AxiosInstance) => (data: { oldPassword: string; newPassword: string }) =>
request.post<any, ApiResp<{ message: string }>>('/api/auth/password/modify', data);
(request: AxiosInstance) => (data: { oldPassword: string; newPassword: string }) =>
request.post<any, ApiResp<{ message: string }>>('/api/auth/password/modify', data);
export const _UserInfo = (request: AxiosInstance) => () =>
request.post<
any,
ApiResp<{
info: {
uid: string;
createdAt: Date;
updatedAt: Date;
avatarUri: string;
nickname: string;
id: string;
name: string;
};
}>
>('/api/auth/info');
request.post<
any,
ApiResp<{
info: {
uid: string;
createdAt: Date;
updatedAt: Date;
avatarUri: string;
nickname: string;
id: string;
name: string;
};
}>
>('/api/auth/info');
export const _regionList = (request: AxiosInstance) => () =>
request.get<
any,
ApiResp<{
regionList: Region[];
}>
>('/api/auth/regionList');
request.get<
any,
ApiResp<{
regionList: Region[];
}>
>('/api/auth/regionList');
export const passwordExistRequest = _passwordExistRequest(request);
export const passwordLoginRequest = _passwordLoginRequest(request, (token) => {
useSessionStore.setState({token: token});
useSessionStore.setState({ token: token });
});
export const passwordModifyRequest = _passwordModifyRequest(request);
export const UserInfo = _UserInfo(request);
Expand Down
1 change: 0 additions & 1 deletion frontend/desktop/src/components/desktop_content/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import { useQuery } from '@tanstack/react-query';
import { getGlobalNotification } from '@/api/platform';
import { useMessage } from '@sealos/ui';
import { BackgroundImageUrl, ImageFallBackUrl } from '@/stores/config';

const TimeComponent = dynamic(() => import('./time'), {
ssr: false
});
Expand Down
137 changes: 68 additions & 69 deletions frontend/desktop/src/components/signin/auth/useWechat.tsx
Original file line number Diff line number Diff line change
@@ -1,78 +1,77 @@
import {getWechatQR, getWechatResult} from '@/api/platform';
import { getWechatQR, getWechatResult } from '@/api/platform';
import useSessionStore from '@/stores/session';
import {Box, Image, useToast} from '@chakra-ui/react';
import {useQuery} from '@tanstack/react-query';
import {useTranslation} from 'next-i18next';
import {useRouter} from 'next/router';
import React, {useCallback, useEffect} from 'react';
import {UserInfo} from "@/api/auth";
import {jwtDecode} from "jwt-decode";
import {AccessTokenPayload} from "@/types/token";
import { Box, Image, useToast } from '@chakra-ui/react';
import { useQuery } from '@tanstack/react-query';
import { useTranslation } from 'next-i18next';
import { useRouter } from 'next/router';
import React, { useCallback, useEffect } from 'react';
import { UserInfo } from '@/api/auth';
import { jwtDecode } from 'jwt-decode';
import { AccessTokenPayload } from '@/types/token';

export default function useWechat() {
const {t} = useTranslation();
const router = useRouter();
const {setSession, setToken} = useSessionStore();
const { t } = useTranslation();
const router = useRouter();
const { setSession, setToken } = useSessionStore();

const [wechatInfo, setwechatInfo] = React.useState<{
code: string;
codeUrl: string;
}>();
const [wechatInfo, setwechatInfo] = React.useState<{
code: string;
codeUrl: string;
}>();

const login = React.useCallback(() => {
getWechatQR().then((res) => {
console.log(res);
setwechatInfo(res.data);
});
}, []);

const {data, isSuccess} = useQuery(
['getWechatResult', wechatInfo?.code],
() => getWechatResult({code: wechatInfo?.code || ''}),
{
refetchInterval: 3 * 1000,
enabled: !!wechatInfo?.code,
}
);
useEffect(() => {
(async () => {
if (isSuccess && data && data.code === 200 && data.data) {
const regionUserToken = data.data.token;
setToken(regionUserToken);
const infoData = await UserInfo();
const payload = jwtDecode<AccessTokenPayload>(regionUserToken);
setSession({
token: regionUserToken,
user: {
k8s_username: payload.userCrName,
name: infoData.data?.info.nickname || '',
avatar: infoData.data?.info.avatarUri || '',
nsid: payload.workspaceId,
ns_uid: payload.workspaceUid,
userCrUid: payload.userCrUid,
userUid: payload.userUid,
userId: payload.userId
},
// @ts-ignore
kubeconfig: result.data.kubeconfig
});
return router.replace('/');
}
})()
}, [data, isSuccess]);
const login = React.useCallback(() => {
getWechatQR().then((res) => {
console.log(res);
setwechatInfo(res.data);
});
}, []);

const { data, isSuccess } = useQuery(
['getWechatResult', wechatInfo?.code],
() => getWechatResult({ code: wechatInfo?.code || '' }),
{
refetchInterval: 3 * 1000,
enabled: !!wechatInfo?.code
}
);
useEffect(() => {
(async () => {
if (isSuccess && data && data.code === 200 && data.data) {
const regionUserToken = data.data.token;
setToken(regionUserToken);
const infoData = await UserInfo();
const payload = jwtDecode<AccessTokenPayload>(regionUserToken);
setSession({
token: regionUserToken,
user: {
k8s_username: payload.userCrName,
name: infoData.data?.info.nickname || '',
avatar: infoData.data?.info.avatarUri || '',
nsid: payload.workspaceId,
ns_uid: payload.workspaceUid,
userCrUid: payload.userCrUid,
userUid: payload.userUid,
userId: payload.userId
},
// @ts-ignore
kubeconfig: result.data.kubeconfig
});
return router.replace('/');
}
})();
}, [data, isSuccess]);

const WechatComponent = useCallback(
() => (
<Box p={5}>
{wechatInfo?.codeUrl && <Image w="200px" src={wechatInfo?.codeUrl} alt="qrcode"></Image>}
</Box>
),
[wechatInfo?.codeUrl]
);
const WechatComponent = useCallback(
() => (
<Box p={5}>
{wechatInfo?.codeUrl && <Image w="200px" src={wechatInfo?.codeUrl} alt="qrcode"></Image>}
</Box>
),
[wechatInfo?.codeUrl]
);

return {
login,
WechatComponent
};
return {
login,
WechatComponent
};
}

0 comments on commit 07d7ac8

Please sign in to comment.