feat(authentication, types): Create authentication entities and services (#5979)
* create authentication entities * ensure hashes are not returned * re-add integration test argument * update filterableprops * update type * pr feedback * update serialization * move finding existing entities and validation to service layer * update types * update models * update user model * pr feedback * fix build * pr feedback * update integration test fixtures --------- Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
co-authored by
Oli Juhl
parent
6b0b3fed7a
commit
479a8b82a9
@@ -0,0 +1,98 @@
|
||||
import { Context, DAL } from "@medusajs/types"
|
||||
import { DALUtils } from "@medusajs/utils"
|
||||
import {
|
||||
FilterQuery as MikroFilterQuery,
|
||||
FindOptions as MikroOptions,
|
||||
LoadStrategy,
|
||||
} from "@mikro-orm/core"
|
||||
|
||||
import { AuthProvider } from "@models"
|
||||
import { RepositoryTypes } from "@types"
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
|
||||
export class AuthProviderRepository extends DALUtils.MikroOrmBaseRepository {
|
||||
protected readonly manager_: SqlEntityManager
|
||||
|
||||
constructor({ manager }: { manager: SqlEntityManager }) {
|
||||
// @ts-ignore
|
||||
// eslint-disable-next-line prefer-rest-params
|
||||
super(...arguments)
|
||||
this.manager_ = manager
|
||||
}
|
||||
|
||||
async find(
|
||||
findOptions: DAL.FindOptions<AuthProvider> = { where: {} },
|
||||
context: Context = {}
|
||||
): Promise<AuthProvider[]> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const findOptions_ = { ...findOptions }
|
||||
findOptions_.options ??= {}
|
||||
|
||||
Object.assign(findOptions_.options, {
|
||||
strategy: LoadStrategy.SELECT_IN,
|
||||
})
|
||||
|
||||
return await manager.find(
|
||||
AuthProvider,
|
||||
findOptions_.where as MikroFilterQuery<AuthProvider>,
|
||||
findOptions_.options as MikroOptions<AuthProvider>
|
||||
)
|
||||
}
|
||||
|
||||
async findAndCount(
|
||||
findOptions: DAL.FindOptions<AuthProvider> = { where: {} },
|
||||
context: Context = {}
|
||||
): Promise<[AuthProvider[], number]> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const findOptions_ = { ...findOptions }
|
||||
findOptions_.options ??= {}
|
||||
|
||||
Object.assign(findOptions_.options, {
|
||||
strategy: LoadStrategy.SELECT_IN,
|
||||
})
|
||||
|
||||
return await manager.findAndCount(
|
||||
AuthProvider,
|
||||
findOptions_.where as MikroFilterQuery<AuthProvider>,
|
||||
findOptions_.options as MikroOptions<AuthProvider>
|
||||
)
|
||||
}
|
||||
|
||||
async delete(ids: string[], context: Context = {}): Promise<void> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
await manager.nativeDelete(AuthProvider, { provider: { $in: ids } }, {})
|
||||
}
|
||||
|
||||
async create(
|
||||
data: RepositoryTypes.CreateAuthProviderDTO[],
|
||||
context: Context = {}
|
||||
): Promise<AuthProvider[]> {
|
||||
const manager: SqlEntityManager =
|
||||
this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const authProviders = data.map((authProviderData) => {
|
||||
return manager.create(AuthProvider, authProviderData)
|
||||
})
|
||||
|
||||
manager.persist(authProviders)
|
||||
|
||||
return authProviders
|
||||
}
|
||||
|
||||
async update(
|
||||
data: RepositoryTypes.UpdateAuthProviderDTO[],
|
||||
context: Context = {}
|
||||
): Promise<AuthProvider[]> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const authProviders = data.map(({ provider, update }) => {
|
||||
return manager.assign(provider, update)
|
||||
})
|
||||
|
||||
manager.persist(authProviders)
|
||||
|
||||
return authProviders
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
import { Context, DAL } from "@medusajs/types"
|
||||
import { DALUtils } from "@medusajs/utils"
|
||||
import {
|
||||
FilterQuery as MikroFilterQuery,
|
||||
FindOptions as MikroOptions,
|
||||
LoadStrategy,
|
||||
} from "@mikro-orm/core"
|
||||
|
||||
import { AuthUser } from "@models"
|
||||
import { RepositoryTypes } from "@types"
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
|
||||
export class AuthUserRepository extends DALUtils.MikroOrmBaseRepository {
|
||||
protected readonly manager_: SqlEntityManager
|
||||
|
||||
constructor({ manager }: { manager: SqlEntityManager }) {
|
||||
// @ts-ignore
|
||||
// eslint-disable-next-line prefer-rest-params
|
||||
super(...arguments)
|
||||
this.manager_ = manager
|
||||
}
|
||||
|
||||
async find(
|
||||
findOptions: DAL.FindOptions<AuthUser> = { where: {} },
|
||||
context: Context = {}
|
||||
): Promise<AuthUser[]> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const findOptions_ = { ...findOptions }
|
||||
findOptions_.options ??= {}
|
||||
|
||||
Object.assign(findOptions_.options, {
|
||||
strategy: LoadStrategy.SELECT_IN,
|
||||
})
|
||||
|
||||
return await manager.find(
|
||||
AuthUser,
|
||||
findOptions_.where as MikroFilterQuery<AuthUser>,
|
||||
findOptions_.options as MikroOptions<AuthUser>
|
||||
)
|
||||
}
|
||||
|
||||
async findAndCount(
|
||||
findOptions: DAL.FindOptions<AuthUser> = { where: {} },
|
||||
context: Context = {}
|
||||
): Promise<[AuthUser[], number]> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const findOptions_ = { ...findOptions }
|
||||
findOptions_.options ??= {}
|
||||
|
||||
Object.assign(findOptions_.options, {
|
||||
strategy: LoadStrategy.SELECT_IN,
|
||||
})
|
||||
|
||||
return await manager.findAndCount(
|
||||
AuthUser,
|
||||
findOptions_.where as MikroFilterQuery<AuthUser>,
|
||||
findOptions_.options as MikroOptions<AuthUser>
|
||||
)
|
||||
}
|
||||
|
||||
async delete(ids: string[], context: Context = {}): Promise<void> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
await manager.nativeDelete(AuthUser, { id: { $in: ids } }, {})
|
||||
}
|
||||
|
||||
async create(
|
||||
data: RepositoryTypes.CreateAuthUserDTO[],
|
||||
context: Context = {}
|
||||
): Promise<AuthUser[]> {
|
||||
const manager: SqlEntityManager =
|
||||
this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const toCreate = data.map((authUser) => {
|
||||
const authUserClone = { ...authUser } as any
|
||||
|
||||
authUserClone.provider ??= authUser.provider_id
|
||||
|
||||
return authUserClone
|
||||
})
|
||||
|
||||
const authUsers = toCreate.map((authUserData) => {
|
||||
return manager.create(AuthUser, authUserData)
|
||||
})
|
||||
|
||||
manager.persist(authUsers)
|
||||
|
||||
return authUsers
|
||||
}
|
||||
|
||||
async update(
|
||||
data: RepositoryTypes.UpdateAuthUserDTO[],
|
||||
context: Context = {}
|
||||
): Promise<AuthUser[]> {
|
||||
const manager = this.getActiveManager<SqlEntityManager>(context)
|
||||
|
||||
const authUsers = data.map(({ user, update }) => {
|
||||
return manager.assign(user, update)
|
||||
})
|
||||
|
||||
manager.persist(authUsers)
|
||||
|
||||
return authUsers
|
||||
}
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
export { MikroOrmBaseRepository as BaseRepository } from "@medusajs/utils"
|
||||
export { AuthProviderRepository } from "./auth-provider"
|
||||
export { AuthUserRepository } from "./auth-user"
|
||||
|
||||
Reference in New Issue
Block a user