Skip to content
Snippets Groups Projects
newsletter.service.ts 2.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
    import { InjectModel } from '@nestjs/mongoose';
    
    import { Model } from 'mongoose';
    
    import { INewsletterSubscription } from './interface/newsletter-subscription.interface';
    
    import { NewsletterSubscription, NewsletterSubscriptionDocument } 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): Promise<NewsletterSubscriptionDocument[]> {
    
        return this.newsletterSubscriptionModel.find({ email: new RegExp(searchString, 'i') }).exec();
      }
    
    
      public async countNewsletterSubscriptions(): Promise<number> {
        return this.newsletterSubscriptionModel.countDocuments({}).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();
      }
    }