import { Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { ReleaseNoteSharesRepository, ReleaseNotesShare, } from '@task-stream/api/tracker/application'; import { Model } from 'mongoose'; import { ReadModels } from './read-model.schemas'; type Stored = ReleaseNotesShare & { _id?: unknown }; const strip = ({ _id: _ignored, ...share }: Stored): ReleaseNotesShare => share; @Injectable() export class MongoReleaseNoteSharesRepository extends ReleaseNoteSharesRepository { constructor( @InjectModel(ReadModels.ReleaseNotesShare) private readonly shares: Model, ) { super(); } async findByRelease(releaseId: string): Promise { const doc = await this.shares.findOne({ releaseId }).lean(); return doc ? strip(doc) : null; } async findByToken(token: string): Promise { const doc = await this.shares.findOne({ token }).lean(); return doc ? strip(doc) : null; } async save(share: ReleaseNotesShare): Promise { await this.shares.updateOne( { releaseId: share.releaseId }, { $set: share }, { upsert: true }, ); } async remove(releaseId: string): Promise { await this.shares.deleteOne({ releaseId }); } }