universo-platform-3d
58 строк · 1.6 Кб
1import { BadRequestException, Injectable } from '@nestjs/common'
2import { InjectModel } from '@nestjs/mongoose'
3import { keyBy } from 'lodash'
4import { Model } from 'mongoose'
5import { CustomDataId } from '../util/mongo-object-id-helpers'
6import { CreateCustomDataDto } from './dto/custom-data.dto'
7import { CustomData, CustomDataDocument } from './models/custom-data.schema'
8import flat from 'flat'
9
10@Injectable()
11export class CustomDataService {
12constructor(
13@InjectModel(CustomData.name)
14private customDataModel: Model<CustomDataDocument>
15) {}
16
17async createCustomData(
18creatorIdUser: string,
19customDataDto: CreateCustomDataDto
20): Promise<CustomDataDocument> {
21const customDataDoc = new this.customDataModel({
22...customDataDto,
23creator: creatorIdUser
24})
25
26return await customDataDoc.save()
27}
28
29async updateCustomDataAdmin(
30customDataId: CustomDataId,
31patchCustomData?: object,
32removeCustomDataKeys?: CustomDataId[]
33): Promise<CustomDataDocument> {
34const updateData: any = {}
35if (patchCustomData) {
36updateData.$set = flat({
37data: {
38...patchCustomData
39}
40})
41}
42if (removeCustomDataKeys) {
43updateData.$unset = updateData.$unset = flat({
44data: {
45...keyBy(removeCustomDataKeys)
46}
47})
48}
49if (Object.keys(updateData).length === 0) {
50throw new BadRequestException('Nothing to update')
51}
52return await this.customDataModel
53.findByIdAndUpdate(customDataId, updateData, {
54new: true
55})
56.exec()
57}
58}
59