2
0

ai-assistant.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { type IGrantedGroup, GroupType } from '@growi/core';
  2. import { type Model, type Document, Schema } from 'mongoose';
  3. import { getOrCreateModel } from '~/server/util/mongoose-utils';
  4. import { type AiAssistant, AiAssistantShareScope, AiAssistantAccessScope } from '../../interfaces/ai-assistant';
  5. export interface AiAssistantDocument extends AiAssistant, Document {}
  6. type AiAssistantModel = Model<AiAssistantDocument>
  7. /*
  8. * Schema Definition
  9. */
  10. const schema = new Schema<AiAssistantDocument>(
  11. {
  12. name: {
  13. type: String,
  14. required: true,
  15. },
  16. description: {
  17. type: String,
  18. required: true,
  19. default: '',
  20. },
  21. additionalInstruction: {
  22. type: String,
  23. required: true,
  24. default: '',
  25. },
  26. pagePathPatterns: [{
  27. type: String,
  28. required: true,
  29. }],
  30. vectorStore: {
  31. type: Schema.Types.ObjectId,
  32. ref: 'VectorStore',
  33. required: true,
  34. },
  35. owner: {
  36. type: Schema.Types.ObjectId,
  37. ref: 'User',
  38. required: true,
  39. },
  40. grantedUsers: [
  41. {
  42. type: Schema.Types.ObjectId,
  43. ref: 'User',
  44. required: true,
  45. },
  46. ],
  47. grantedGroups: {
  48. type: [{
  49. type: {
  50. type: String,
  51. enum: Object.values(GroupType),
  52. required: true,
  53. default: 'UserGroup',
  54. },
  55. item: {
  56. type: Schema.Types.ObjectId,
  57. refPath: 'grantedGroups.type',
  58. required: true,
  59. index: true,
  60. },
  61. }],
  62. validate: [function(arr: IGrantedGroup[]): boolean {
  63. if (arr == null) return true;
  64. const uniqueItemValues = new Set(arr.map(e => e.item));
  65. return arr.length === uniqueItemValues.size;
  66. }, 'grantedGroups contains non unique item'],
  67. default: [],
  68. },
  69. shareScope: {
  70. type: String,
  71. enum: Object.values(AiAssistantShareScope),
  72. required: true,
  73. },
  74. ownerAccessScope: {
  75. type: String,
  76. enum: Object.values(AiAssistantAccessScope),
  77. required: true,
  78. },
  79. },
  80. {
  81. timestamps: true,
  82. },
  83. );
  84. export default getOrCreateModel<AiAssistantDocument, AiAssistantModel>('AiAssistant', schema);