File

src/origdatablocks/origdatablocks.service.ts

Index

Methods

Constructor

constructor(origDatablockModel: Model, request: Request)
Parameters :
Name Type Optional
origDatablockModel Model<OrigDatablockDocument> No
request Request No

Methods

Async create
create(createOrigdatablockDto: CreateOrigDatablockDto)
Parameters :
Name Type Optional
createOrigdatablockDto CreateOrigDatablockDto No
Returns : Promise<OrigDatablock>
Async findAll
findAll(filter: FilterQuery)
Parameters :
Name Type Optional
filter FilterQuery<OrigDatablockDocument> No
Returns : Promise<OrigDatablock[]>
Async findOne
findOne(filter: FilterQuery)
Parameters :
Name Type Optional
filter FilterQuery<OrigDatablockDocument> No
Returns : Promise<OrigDatablock | null>
Async fullfacet
fullfacet(filters: IFacets, subField?: string)
Parameters :
Name Type Optional
filters IFacets<IOrigDatablockFields> No
subField string Yes
Returns : Promise<Record[]>
Async fullquery
fullquery(filter: IFilters)
Parameters :
Name Type Optional
filter IFilters<OrigDatablockDocument | IOrigDatablockFields> No
Returns : Promise<[] | null>
Async fullqueryFilesList
fullqueryFilesList(filter: IFilters)
Parameters :
Name Type Optional
filter IFilters<OrigDatablockDocument | IOrigDatablockFields> No
Returns : Promise<[] | null>
Async remove
remove(filter: FilterQuery)
Parameters :
Name Type Optional
filter FilterQuery<OrigDatablockDocument> No
Returns : Promise<>
Async update
update(filter: FilterQuery, updateOrigdatablockDto: UpdateOrigDatablockDto)
Parameters :
Name Type Optional
filter FilterQuery<OrigDatablockDocument> No
updateOrigdatablockDto UpdateOrigDatablockDto No
Returns : Promise<OrigDatablock | null>
import { Injectable, Inject, Scope } from "@nestjs/common";
import { REQUEST } from "@nestjs/core";
import { Request } from "express";
import { InjectModel } from "@nestjs/mongoose";
import { FilterQuery, Model, PipelineStage, QueryOptions } from "mongoose";
import { IFacets, IFilters } from "src/common/interfaces/common.interface";
import {
  addCreatedByFields,
  addUpdatedByField,
  createFullfacetPipeline,
  createFullqueryFilter,
  parseLimitFilters,
  parseLimitFiltersForPipeline,
} from "src/common/utils";
import { CreateOrigDatablockDto } from "./dto/create-origdatablock.dto";
import { UpdateOrigDatablockDto } from "./dto/update-origdatablock.dto";
import { IOrigDatablockFields } from "./interfaces/origdatablocks.interface";
import {
  OrigDatablock,
  OrigDatablockDocument,
} from "./schemas/origdatablock.schema";
import { JWTUser } from "src/auth/interfaces/jwt-user.interface";

@Injectable({ scope: Scope.REQUEST })
export class OrigDatablocksService {
  constructor(
    @InjectModel(OrigDatablock.name)
    private origDatablockModel: Model<OrigDatablockDocument>,
    @Inject(REQUEST) private request: Request,
  ) {}

  async create(
    createOrigdatablockDto: CreateOrigDatablockDto,
  ): Promise<OrigDatablock> {
    const username = (this.request.user as JWTUser).username;
    const createdOrigDatablock = new this.origDatablockModel(
      addCreatedByFields(createOrigdatablockDto, username),
    );
    return createdOrigDatablock.save();
  }

  async findAll(
    filter: FilterQuery<OrigDatablockDocument>,
  ): Promise<OrigDatablock[]> {
    const whereFilter: FilterQuery<OrigDatablockDocument> = filter.where ?? {};
    const fieldsProjection: FilterQuery<OrigDatablockDocument> =
      filter.fields ?? {};
    const { limit, skip, sort } = parseLimitFilters(filter.limits);

    const origdatablockPromise = this.origDatablockModel
      .find(whereFilter, fieldsProjection)
      .limit(limit)
      .skip(skip)
      .sort(sort);

    const origdatablock = await origdatablockPromise.exec();

    return origdatablock;
  }

  async findOne(
    filter: FilterQuery<OrigDatablockDocument>,
  ): Promise<OrigDatablock | null> {
    return this.origDatablockModel.findOne(filter).exec();
  }

  async fullquery(
    filter: IFilters<OrigDatablockDocument, IOrigDatablockFields>,
  ): Promise<OrigDatablock[] | null> {
    const filterQuery: FilterQuery<OrigDatablockDocument> =
      createFullqueryFilter<OrigDatablockDocument>(
        this.origDatablockModel,
        "_id",
        filter.fields as FilterQuery<OrigDatablockDocument>,
      );
    const modifiers: QueryOptions = parseLimitFilters(filter.limits);

    return this.origDatablockModel.find(filterQuery, null, modifiers).exec();
  }

  async fullqueryFilesList(
    filter: IFilters<OrigDatablockDocument, IOrigDatablockFields>,
  ): Promise<OrigDatablock[] | null> {
    const filterQuery: FilterQuery<OrigDatablockDocument> =
      createFullqueryFilter<OrigDatablockDocument>(
        this.origDatablockModel,
        "_id",
        filter.fields as FilterQuery<OrigDatablockDocument>,
      );
    const modifiers = parseLimitFiltersForPipeline(filter.limits);

    const pipelineStages: PipelineStage[] = [
      { $match: filterQuery },
      {
        $lookup: {
          from: "Dataset",
          localField: "datasetId",
          foreignField: "pid",
          as: "Dataset",
        },
      },
      {
        $addFields: {
          datasetExist: { $gt: [{ $size: "$Dataset" }, 0] },
        },
      },
      { $unset: "Dataset" },
      { $unwind: "$dataFileList" },
      ...modifiers,
    ];

    return this.origDatablockModel.aggregate(pipelineStages).exec();
  }

  async fullfacet(
    filters: IFacets<IOrigDatablockFields>,
    subField?: string,
  ): Promise<Record<string, unknown>[]> {
    const fields = filters.fields ?? {};
    const facets = filters.facets ?? [];
    const pipeline = createFullfacetPipeline<
      OrigDatablockDocument,
      FilterQuery<OrigDatablockDocument>
    >(this.origDatablockModel, "datasetId", fields, facets, subField);

    return this.origDatablockModel.aggregate(pipeline).exec();
  }

  async update(
    filter: FilterQuery<OrigDatablockDocument>,
    updateOrigdatablockDto: UpdateOrigDatablockDto,
  ): Promise<OrigDatablock | null> {
    const username = (this.request.user as JWTUser).username;
    return this.origDatablockModel
      .findOneAndUpdate(
        filter,
        addUpdatedByField(updateOrigdatablockDto, username),
        { new: true },
      )
      .exec();
  }

  async remove(filter: FilterQuery<OrigDatablockDocument>): Promise<unknown> {
    return this.origDatablockModel.findOneAndRemove(filter).exec();
  }
}

results matching ""

    No results matching ""