Fixing issues with search endpoint not handling users fully.
This commit is contained in:
parent
a07230ed59
commit
4ff9de1b6c
|
@ -106,6 +106,12 @@ async function createInstance(template) {
|
||||||
views: {},
|
views: {},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// NOTE: indexes need to be created before any tables/templates
|
||||||
|
// add view for linked rows
|
||||||
|
await createLinkView(appId)
|
||||||
|
await createRoutingView(appId)
|
||||||
|
await createAllSearchIndex(appId)
|
||||||
|
|
||||||
// replicate the template data to the instance DB
|
// replicate the template data to the instance DB
|
||||||
// this is currently very hard to test, downloading and importing template files
|
// this is currently very hard to test, downloading and importing template files
|
||||||
/* istanbul ignore next */
|
/* istanbul ignore next */
|
||||||
|
@ -119,11 +125,6 @@ async function createInstance(template) {
|
||||||
await db.put(USERS_TABLE_SCHEMA)
|
await db.put(USERS_TABLE_SCHEMA)
|
||||||
}
|
}
|
||||||
|
|
||||||
// add view for linked rows
|
|
||||||
await createLinkView(appId)
|
|
||||||
await createRoutingView(appId)
|
|
||||||
await createAllSearchIndex(appId)
|
|
||||||
|
|
||||||
return { _id: appId }
|
return { _id: appId }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ const { FieldTypes } = require("../../../constants")
|
||||||
const { isEqual } = require("lodash")
|
const { isEqual } = require("lodash")
|
||||||
const { validate, findRow } = require("./utils")
|
const { validate, findRow } = require("./utils")
|
||||||
const { fullSearch, paginatedSearch } = require("./internalSearch")
|
const { fullSearch, paginatedSearch } = require("./internalSearch")
|
||||||
|
const { getGlobalUsersFromMetadata } = require("../../../utilities/global")
|
||||||
|
|
||||||
const CALCULATION_TYPES = {
|
const CALCULATION_TYPES = {
|
||||||
SUM: "sum",
|
SUM: "sum",
|
||||||
|
@ -290,6 +291,10 @@ exports.search = async ctx => {
|
||||||
|
|
||||||
// Enrich search results with relationships
|
// Enrich search results with relationships
|
||||||
if (response.rows && response.rows.length) {
|
if (response.rows && response.rows.length) {
|
||||||
|
// enrich with global users if from users table
|
||||||
|
if (tableId === InternalTables.USER_METADATA) {
|
||||||
|
response.rows = await getGlobalUsersFromMetadata(appId, response.rows)
|
||||||
|
}
|
||||||
const table = await db.get(tableId)
|
const table = await db.get(tableId)
|
||||||
response.rows = await outputProcessing(ctx, table, response.rows)
|
response.rows = await outputProcessing(ctx, table, response.rows)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ function removeGlobalProps(user) {
|
||||||
|
|
||||||
exports.fetchMetadata = async function (ctx) {
|
exports.fetchMetadata = async function (ctx) {
|
||||||
const database = new CouchDB(ctx.appId)
|
const database = new CouchDB(ctx.appId)
|
||||||
const global = await getGlobalUsers(ctx, ctx.appId)
|
const global = await getGlobalUsers(ctx.appId)
|
||||||
const metadata = (
|
const metadata = (
|
||||||
await database.allDocs(
|
await database.allDocs(
|
||||||
getUserMetadataParams(null, {
|
getUserMetadataParams(null, {
|
||||||
|
|
|
@ -13,7 +13,7 @@ const CouchDB = require("../../db")
|
||||||
const { FieldTypes } = require("../../constants")
|
const { FieldTypes } = require("../../constants")
|
||||||
const { getMultiIDParams, USER_METDATA_PREFIX } = require("../../db/utils")
|
const { getMultiIDParams, USER_METDATA_PREFIX } = require("../../db/utils")
|
||||||
const { partition } = require("lodash")
|
const { partition } = require("lodash")
|
||||||
const { getGlobalUsers } = require("../../utilities/global")
|
const { getGlobalUsersFromMetadata } = require("../../utilities/global")
|
||||||
const processor = require("../../utilities/rowProcessor")
|
const processor = require("../../utilities/rowProcessor")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -71,17 +71,7 @@ async function getFullLinkedDocs(ctx, appId, links) {
|
||||||
let [users, other] = partition(linked, linkRow =>
|
let [users, other] = partition(linked, linkRow =>
|
||||||
linkRow._id.startsWith(USER_METDATA_PREFIX)
|
linkRow._id.startsWith(USER_METDATA_PREFIX)
|
||||||
)
|
)
|
||||||
const globalUsers = await getGlobalUsers(ctx, appId, users)
|
users = await getGlobalUsersFromMetadata(appId, users)
|
||||||
users = users.map(user => {
|
|
||||||
const globalUser = globalUsers.find(
|
|
||||||
globalUser => globalUser && user._id.includes(globalUser._id)
|
|
||||||
)
|
|
||||||
return {
|
|
||||||
...globalUser,
|
|
||||||
// doing user second overwrites the id and rev (always metadata)
|
|
||||||
...user,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return [...other, ...users]
|
return [...other, ...users]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,13 +39,13 @@ exports.getCachedSelf = async (ctx, appId) => {
|
||||||
return processUser(appId, user)
|
return processUser(appId, user)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.getGlobalUser = async (ctx, appId, userId) => {
|
exports.getGlobalUser = async (appId, userId) => {
|
||||||
const db = getGlobalDB()
|
const db = getGlobalDB()
|
||||||
let user = await db.get(getGlobalIDFromUserMetadataID(userId))
|
let user = await db.get(getGlobalIDFromUserMetadataID(userId))
|
||||||
return processUser(appId, user)
|
return processUser(appId, user)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.getGlobalUsers = async (ctx, appId = null, users = null) => {
|
exports.getGlobalUsers = async (appId = null, users = null) => {
|
||||||
const db = getGlobalDB()
|
const db = getGlobalDB()
|
||||||
let globalUsers
|
let globalUsers
|
||||||
if (users) {
|
if (users) {
|
||||||
|
@ -73,3 +73,17 @@ exports.getGlobalUsers = async (ctx, appId = null, users = null) => {
|
||||||
}
|
}
|
||||||
return globalUsers.map(user => exports.updateAppRole(appId, user))
|
return globalUsers.map(user => exports.updateAppRole(appId, user))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.getGlobalUsersFromMetadata = async (appId, users) => {
|
||||||
|
const globalUsers = await exports.getGlobalUsers(appId, users)
|
||||||
|
return users.map(user => {
|
||||||
|
const globalUser = globalUsers.find(
|
||||||
|
globalUser => globalUser && user._id.includes(globalUser._id)
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
...globalUser,
|
||||||
|
// doing user second overwrites the id and rev (always metadata)
|
||||||
|
...user,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ const { InternalTables } = require("../db/utils")
|
||||||
const { getGlobalUser } = require("../utilities/global")
|
const { getGlobalUser } = require("../utilities/global")
|
||||||
|
|
||||||
exports.getFullUser = async (ctx, userId) => {
|
exports.getFullUser = async (ctx, userId) => {
|
||||||
const global = await getGlobalUser(ctx, ctx.appId, userId)
|
const global = await getGlobalUser(ctx.appId, userId)
|
||||||
let metadata
|
let metadata
|
||||||
try {
|
try {
|
||||||
// this will throw an error if the db doesn't exist, or there is no appId
|
// this will throw an error if the db doesn't exist, or there is no appId
|
||||||
|
|
|
@ -104,7 +104,7 @@ exports.addAppRoleToUser = async (ctx, appId, roleId, userId = null) => {
|
||||||
user = await exports.getGlobalSelf(ctx)
|
user = await exports.getGlobalSelf(ctx)
|
||||||
endpoint = `/api/global/users/self`
|
endpoint = `/api/global/users/self`
|
||||||
} else {
|
} else {
|
||||||
user = await getGlobalUser(ctx, appId, userId)
|
user = await getGlobalUser(appId, userId)
|
||||||
body._id = userId
|
body._id = userId
|
||||||
endpoint = `/api/global/users`
|
endpoint = `/api/global/users`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue