Add login state query
This commit is contained in:
parent
084f38bcbf
commit
a1064b2a10
5 changed files with 50 additions and 4 deletions
|
@ -5,6 +5,7 @@ export const getUserQuery = gql`query GetUser($login: String!) {
|
|||
login
|
||||
name
|
||||
url
|
||||
avatarUrl
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
@ -13,6 +14,7 @@ export interface User {
|
|||
login: string;
|
||||
name: string | null;
|
||||
url: string;
|
||||
avatarUrl: string;
|
||||
}
|
||||
|
||||
export interface GetUserQueryResult {
|
||||
|
|
|
@ -3,8 +3,6 @@ import gql from 'graphql-tag';
|
|||
export const getViewerQuery = gql`query GetViewer {
|
||||
viewer {
|
||||
login
|
||||
name
|
||||
avatarUrl
|
||||
id
|
||||
}
|
||||
}
|
||||
|
@ -12,8 +10,6 @@ export const getViewerQuery = gql`query GetViewer {
|
|||
|
||||
export interface Viewer {
|
||||
login: string;
|
||||
name: string | null;
|
||||
avatarUrl: string;
|
||||
id: string;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import CreateUserResolver from './resolvers/authenticate-prompt/create-user-reso
|
|||
import LoginResolver from './resolvers/authenticate-prompt/login-resolver';
|
||||
import PromptInfoResolver from './resolvers/authenticate-prompt/prompt-info-resolver';
|
||||
import SetSymbolResolver from './resolvers/authenticate-prompt/set-symbol-resolver';
|
||||
import LoginStateResolver from './resolvers/developer/get-login-state';
|
||||
import type { WebsiteAPIContext } from './types';
|
||||
|
||||
export default async function registerWebsiteApi(server: MyFastifyInstance): Promise<void> {
|
||||
|
@ -20,6 +21,7 @@ export default async function registerWebsiteApi(server: MyFastifyInstance): Pro
|
|||
LoginResolver,
|
||||
SetSymbolResolver,
|
||||
CreateUserResolver,
|
||||
LoginStateResolver,
|
||||
],
|
||||
});
|
||||
const apolloServer = new ApolloServer({
|
||||
|
|
15
backend/src/routes/website-api/models/login-state.ts
Normal file
15
backend/src/routes/website-api/models/login-state.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import { Field, ObjectType } from 'type-graphql';
|
||||
|
||||
@ObjectType()
|
||||
export default class LoginState {
|
||||
@Field(() => String, {
|
||||
nullable: true,
|
||||
})
|
||||
public name!: string | null;
|
||||
|
||||
@Field(() => String)
|
||||
public login!: string;
|
||||
|
||||
@Field(() => String)
|
||||
public avatarUrl!: string;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/* eslint-disable class-methods-use-this */
|
||||
import { Ctx, Query, Resolver } from 'type-graphql';
|
||||
import Developer from '../../../../database/entities/developer';
|
||||
import { getUser } from '../../../../graphql/github/sdk';
|
||||
import LoginState from '../../models/login-state';
|
||||
import type { WebsiteAPIContext } from '../../types';
|
||||
|
||||
@Resolver(LoginState)
|
||||
export default class LoginStateResolver {
|
||||
@Query(() => LoginState, {
|
||||
nullable: true,
|
||||
})
|
||||
public async loginState(
|
||||
@Ctx() { sessionData }: WebsiteAPIContext,
|
||||
): Promise<LoginState | null> {
|
||||
if (!sessionData.loginState) return null;
|
||||
const developer = await Developer.findOne(sessionData.loginState.developerId);
|
||||
if (!developer) {
|
||||
console.error('Developer not found');
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
sessionData.loginState = null;
|
||||
return null;
|
||||
}
|
||||
const gitHubUser = await getUser(developer.gitHubLogin);
|
||||
return {
|
||||
login: gitHubUser.login,
|
||||
name: gitHubUser.name,
|
||||
avatarUrl: gitHubUser.avatarUrl,
|
||||
};
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue