Add sequelize index file

This commit is contained in:
Jorge Vargas 2024-09-03 19:11:19 -06:00
parent 6f00481c25
commit d20b00532d
12 changed files with 77 additions and 50 deletions

View file

@ -4,24 +4,21 @@ import { SchemaLink } from "@apollo/client/link/schema"
import { makeExecutableSchema } from "@graphql-tools/schema";
import { getSession } from 'auth-astro/server';
import type { Session } from '@auth/core/types';
import { typeDefs } from "./__generated__/typeDefs.generated";
import resolvers from '@/graphql/resolvers'
import type { MySqlDialect } from '@sequelize/mysql';
import { Sequelize, type ModelStatic, type Options } from '@sequelize/core'
import db from '@/sequelize';
const schema = makeExecutableSchema({ typeDefs, resolvers })
export type ResolverContext = { request?: Request, session?: Session }
const envOptions: Options<MySqlDialect> = JSON.parse(import.meta.env.SEQUELIZE) || {}
export async function getApolloClient(request?: Request) {
const session = request ? await getSession(request) : null
const db = new Sequelize(envOptions)
envOptions.models = Object.values<ModelStatic>(await import.meta.glob('@/sequelize/models/**/*.ts', { eager: true, import: 'default' }))
return new ApolloClient({
ssrMode: true,
link: new SchemaLink({ schema, context: { request, session } }),
link: new SchemaLink({ schema, context: { request, session, db } }),
cache: new InMemoryCache()
})
}

View file

@ -1,5 +1,5 @@
import { composeResolvers } from '@graphql-tools/resolvers-composition'
import type { Resolvers } from '@/graphql/__generated__/types.generated'
// import type { Resolvers } from '@/graphql/__generated__/types.generated'
const resolversComposition = {
//'Mutation.updateUser': [isAuthedApp]
@ -49,7 +49,7 @@ async function cropPFP(streamItem, username, imgId) {
return await processImage(fullPath)
}*/
const resolvers: Resolvers = {
const resolvers = {
Mutation: {
/*registerUser: async (_, { username, email, pfp }, { db }) => {
await Promise.all([

View file

@ -8,6 +8,7 @@ const fuzzySearch = (words: string[]) => `^${words.map(w => `(?=.*\b${w}\b)`)}.+
const resolvers: Resolvers = {
Query: {
// @ts-ignore
searchAlbum: async (_, args, { db }) => {
const { title, categories, limit = 10, offset = 0, order = ['createdAt'], mode = 'DESC', status = ['show'] } = args
const fuzzyCondition = title ? {
@ -27,6 +28,7 @@ const resolvers: Resolvers = {
status: { [Op.in]: status }
},
include,
// @ts-ignore
order: [literal('`album`.`status` = \'coming\' DESC'), ...order.map(o => [o, mode])]
})

View file

@ -5,7 +5,8 @@ import type Album from "@/sequelize/models/album"
const resolvers: Resolvers = {
// Upload: GraphQLUpload,
Album: {
artists: (parent: Album, args, context, info) => parent.getArtists(),
// @ts-ignore
artists: (parent, args, context, info) => parent.getArtists(),
/* categories: (parent, args, context, info) => parent.getCategories(),
classifications: (parent, args, context, info) =>
parent.getClassifications(),

View file

@ -1,6 +1,6 @@
import type { Resolvers } from '@/graphql/__generated__/types.generated'
// import type { Resolvers } from '@/graphql/__generated__/types.generated'
const userResolvable: Resolvers = {
const userResolvable = {
/* roles: parent => parent.getRoles(),
permissions: async parent => {
const roles = await parent.getRoles()
@ -8,26 +8,32 @@ const userResolvable: Resolvers = {
}, */
pages: async (_, __, { session }) => {
const roles = await parent.getRoles()
const permissions = roles.map(r => r.permissions).flat()
const permissions = roles.map((r) => r.permissions).flat()
return pages.filter(({ perms }) => perms.length === 0 || perms.some(r => permissions.includes(r)))
},
return pages.filter(
({ perms }) =>
perms.length === 0 || perms.some((r) => permissions.includes(r))
)
}
/* comments: (user, _, { db }) => user.getComments({ where: { albumId: { [Op.not]: null } } }),
favorites: user => user.getAlbums(),
imgUrl: async user => `https://cdn.sittingonclouds.net/user/${user.imgId ? `${user.username}_${user.imgId}` : 'default'
}.png` */
}
const resolvers: Resolvers = {
const resolvers = {
// User: userResolvable,
UserMe: {
pages: async (_, __, { session }) => {
const roles = await parent.getRoles()
const permissions = roles.map(r => r.permissions).flat()
const permissions = roles.map((r) => r.permissions).flat()
return pages.filter(({ perms }) => perms.length === 0 || perms.some(r => permissions.includes(r)))
},
},
return pages.filter(
({ perms }) =>
perms.length === 0 || perms.some((r) => permissions.includes(r))
)
}
}
/*Role: { permissions: parent => typeof parent.permissions === 'string' || parent.permissions instanceof String ? JSON.parse(parent.permissions) : parent.permissions },
Submission: {
submitter: submission => submission.getUser(),