src/proposals/proposals.service.ts
Methods |
constructor(proposalModel: Model<ProposalDocument>, request: Request)
|
|||||||||
|
Defined in src/proposals/proposals.service.ts:21
|
|||||||||
|
Parameters :
|
| Async create | ||||||
create(createProposalDto: CreateProposalDto)
|
||||||
|
Defined in src/proposals/proposals.service.ts:28
|
||||||
|
Parameters :
Returns :
Promise<ProposalClass>
|
| Async findAll | ||||||
findAll(filter: IFilters<ProposalDocument | IProposalFields>)
|
||||||
|
Defined in src/proposals/proposals.service.ts:36
|
||||||
|
Parameters :
Returns :
Promise<ProposalClass[]>
|
| Async findOne | ||||||
findOne(filter: FilterQuery<ProposalDocument>)
|
||||||
|
Defined in src/proposals/proposals.service.ts:78
|
||||||
|
Parameters :
Returns :
Promise<ProposalClass | null>
|
| Async fullfacet | ||||||
fullfacet(filters: IFacets
|
||||||
|
Defined in src/proposals/proposals.service.ts:64
|
||||||
|
Parameters :
Returns :
Promise<Record[]>
|
| Async fullquery | ||||||
fullquery(filter: IFilters<ProposalDocument | IProposalFields>)
|
||||||
|
Defined in src/proposals/proposals.service.ts:50
|
||||||
|
Parameters :
Returns :
Promise<ProposalClass[]>
|
| Async remove | ||||||
remove(filter: FilterQuery<ProposalDocument>)
|
||||||
|
Defined in src/proposals/proposals.service.ts:101
|
||||||
|
Parameters :
Returns :
Promise<>
|
| Async update | |||||||||
update(filter: FilterQuery<ProposalDocument>, updateProposalDto: UpdateProposalDto)
|
|||||||||
|
Defined in src/proposals/proposals.service.ts:84
|
|||||||||
|
Parameters :
Returns :
Promise<ProposalClass | null>
|
import { Inject, Injectable, 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 {
createFullfacetPipeline,
createFullqueryFilter,
parseLimitFilters,
addCreatedByFields,
addUpdatedByField,
} from "src/common/utils";
import { CreateProposalDto } from "./dto/create-proposal.dto";
import { UpdateProposalDto } from "./dto/update-proposal.dto";
import { IProposalFields } from "./interfaces/proposal-filters.interface";
import { ProposalClass, ProposalDocument } from "./schemas/proposal.schema";
import { JWTUser } from "src/auth/interfaces/jwt-user.interface";
@Injectable({ scope: Scope.REQUEST })
export class ProposalsService {
constructor(
@InjectModel(ProposalClass.name)
private proposalModel: Model<ProposalDocument>,
@Inject(REQUEST) private request: Request,
) {}
async create(createProposalDto: CreateProposalDto): Promise<ProposalClass> {
const username = (this.request.user as JWTUser).username;
const createdProposal = new this.proposalModel(
addCreatedByFields<CreateProposalDto>(createProposalDto, username),
);
return createdProposal.save();
}
async findAll(
filter: IFilters<ProposalDocument, IProposalFields>,
): Promise<ProposalClass[]> {
const whereFilter: FilterQuery<ProposalDocument> = filter.where ?? {};
const { limit, skip, sort } = parseLimitFilters(filter.limits);
return this.proposalModel
.find(whereFilter)
.limit(limit)
.skip(skip)
.sort(sort)
.exec();
}
async fullquery(
filter: IFilters<ProposalDocument, IProposalFields>,
): Promise<ProposalClass[]> {
const filterQuery: FilterQuery<ProposalDocument> =
createFullqueryFilter<ProposalDocument>(
this.proposalModel,
"proposalId",
filter.fields,
);
const modifiers: QueryOptions = parseLimitFilters(filter.limits);
return this.proposalModel.find(filterQuery, null, modifiers).exec();
}
async fullfacet(
filters: IFacets<IProposalFields>,
): Promise<Record<string, unknown>[]> {
const fields = filters.fields ?? {};
const facets = filters.facets ?? [];
const pipeline: PipelineStage[] = createFullfacetPipeline<
ProposalDocument,
IProposalFields
>(this.proposalModel, "proposalId", fields, facets);
return await this.proposalModel.aggregate(pipeline).exec();
}
async findOne(
filter: FilterQuery<ProposalDocument>,
): Promise<ProposalClass | null> {
return this.proposalModel.findOne(filter).exec();
}
async update(
filter: FilterQuery<ProposalDocument>,
updateProposalDto: UpdateProposalDto,
): Promise<ProposalClass | null> {
const username = (this.request.user as JWTUser).username;
return this.proposalModel
.findOneAndUpdate(
filter,
addUpdatedByField(updateProposalDto, username),
{
new: true,
},
)
.exec();
}
async remove(filter: FilterQuery<ProposalDocument>): Promise<unknown> {
return this.proposalModel.findOneAndRemove(filter).exec();
}
}