import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model, Types } from 'mongoose'; import { INewsletterSubscription } from './interface/newsletter-subscription.interface'; import { NewsletterSubscription } from './newsletter-subscription.schema'; @Injectable() export class NewsletterService { constructor( @InjectModel(NewsletterSubscription.name) private newsletterSubscriptionModel: Model<INewsletterSubscription> ) {} public async newsletterSubscribe(email: string): Promise<NewsletterSubscription> { const existingEmail = await this.findOne(email); if (existingEmail) { throw new HttpException('Email already exists', HttpStatus.BAD_REQUEST); } const createSubscription = new this.newsletterSubscriptionModel({ email: email }); createSubscription.save(); return await this.findOne(email); } public async newsletterUnsubscribe(email: string): Promise<NewsletterSubscription> { const subscription = await this.newsletterSubscriptionModel.findOne({ email: email }).exec(); if (!subscription) { throw new HttpException('Invalid email', HttpStatus.BAD_REQUEST); } return subscription.deleteOne(); } public async findOne(mail: string): Promise<NewsletterSubscription | undefined> { return this.newsletterSubscriptionModel.findOne({ email: mail }).exec(); } public async searchNewsletterSubscription(searchString: string) { return this.newsletterSubscriptionModel.find({ email: new RegExp(searchString, 'i') }).exec(); } public async deleteOneEmail(mail: string): Promise<NewsletterSubscription | undefined> { const subscription = await this.newsletterSubscriptionModel.findOne({ email: mail }).exec(); if (!subscription) { throw new HttpException('Invalid email', HttpStatus.BAD_REQUEST); } return subscription.deleteOne(); } public async findAll(): Promise<NewsletterSubscription[]> { return await this.newsletterSubscriptionModel.find().exec(); } }