I use ravendb in nestjs
I have an enum in the library project (core library):
export enum GroupType {
Agent = "agent",
System = "system"
}
and I import and use that enum in the index logic (raven project)
import { Models } from '@ply/core';
export class Agents_All extends AbstractJavaScriptMultiMapIndexCreationTask<AgentResult> {
this.map<IUser>(User, user => {
if(user.groupType === Models.Enums.GroupType.Agent){
Q1 : how can I use my enums or constants in the map index, should I export them to the Ravendb as an additional source? export enum like a function?
and below is the generated map index on the Ravendb side : Q2 : why did Ravendb add the project's name of the enum as a namespace before the enum
Models.Enums.GroupType.Agent converted to core_1.Models.Enums.GroupType.Agent
We implemented this feature and in order to use such enum, you should register it via this.registerEnum(() => RoleString.Admin);
call. Then you can use such enum inside map/reduce function and it is replaced with correct enum value.
enum RoleNumber {
Admin,
User
}
class User {
id: string;
name: string;
roleString: RoleString;
roleNumber: RoleNumber;
}
class UsersByStringRole extends AbstractJavaScriptIndexCreationTask<User, Pick<User, "name" | "roleString">> {
constructor() {
super();
this.registerEnum(() => (RoleString.Admin));
this.map(User, u => {
if (u.roleString === RoleString.Admin) {
return ({
name: u.name,
roleString: u.roleString
});
}
return null;
});
}
}
class UsersByNumberRole extends AbstractJavaScriptIndexCreationTask<User, Pick<User, "name" | "roleNumber">> {
constructor() {
super();
this.registerEnum(() => RoleNumber.Admin);
this.map(User, u => {
if (u.roleNumber === RoleNumber.Admin) {
return ({
name: u.name,
roleNumber: u.roleNumber
});
}
return null;
});
}
}