UNPKG

kakojs

Version:

Lightweight nodejs base minimalist framework to make api easy.

113 lines (108 loc) 3.15 kB
import BaseModel from '$/modules/core/base/model' export default class AuthModel extends BaseModel { static get modelName () { return 'Auth' } static get skipDefaultCRUDSchema () { return true } static get gqlSchema () { return { typeDefs: ` type AuthPayload { user: User accessToken: String authenticated: Boolean! } type ResetPasswordPayload { error: String generatedNewPassword: String } `, queries: [], mutations: [ { name: 'login', typeDef: 'login(email: String!, password: String!): AuthPayload', resolver: { controllerFn: 'login', args: ['email', 'password'], publish: { event: 'USER_LOGGED_IN', payload: ({ result }) => ({ userLoggedIn: result ? result.user : null }) } } }, { name: 'logout', typeDef: 'logout(accessToken: String): AuthPayload', resolver: { controllerFn: 'logout', args: ['accessToken'], publish: { event: 'USER_LOGGED_OUT', payload: ({ context }) => ({ userLoggedOut: context ? context.user : null }) } } }, { name: 'register', typeDef: 'register(name: String!, email: String!, password: String!): AuthPayload', resolver: { controllerFn: 'register', args: ['name', 'email', 'password'] } }, { name: 'forgotPassword', typeDef: 'forgotPassword(email: String!): String', resolver: { controllerFn: 'forgotPassword', args: ['email'] } }, { name: 'resetPassword', typeDef: 'resetPassword(resetToken: String!): ResetPasswordPayload!', resolver: { controllerFn: 'resetPassword', args: ['resetToken'] } }, { name: 'changePassword', typeDef: 'changePassword(userId: Int!, oldPassword: String!, newPassword: String!): AuthPayload!', resolver: { controllerFn: 'changePassword', args: ['userId', 'oldPassword', 'newPassword'] } } ], subscriptions: [ { name: 'userLoggedIn', typeDef: 'userLoggedIn: User', subscribe: 'USER_LOGGED_IN' // Or { event: 'USER_LOGGED_IN' } /** * subscribe: { event: 'USER_LOGGED_IN', filter: (payload, variables) => null */ }, { name: 'userLoggedOut', typeDef: 'userLoggedOut: User', subscribe: 'USER_LOGGED_OUT' } ] } } static get jsonSchema () { return { required: ['email', 'password'], properties: { name: { type: ['string', null], minLength: 1, maxLength: 250 }, email: { type: 'string', minLength: 1, maxLength: 150 }, password: { type: 'string', minLength: 1, maxLength: 300 } } } } }