Task: build a endpoint to decide whether a user requested to be unsubscribed from a mailing list in JavaScript using nest.

API specification:

openapi: 3.0.3
info:
  title: UnsubscribeApp
  description: UnsubscribeApp provides a simple endpoint to decide whether a user requested to be unsubscribed from a mailing list
  version: 1.0.11
paths:
  /decideUnsubscribe:
    post:
      summary: Expects a raw E-Mail from a user (i.e. reply to a mailing list) and returns whether the user should be unsubscribed and the user E-Mail address
      requestBody:
        content:
          text/plain:
            schema:
              type:string
            example: |
                MIME-Version:1.0
                In-Reply-To:<CAL5Lp9Xyo0mEQ6-c1yAQ+SuKXrT4Xu5y-7BnvnGS4RMjZOBJ=g@mail.gmail.com>
                From:Chris <c@sigparser.com>
                Date:Wed, 9 Jan 2019 08:36:15 -0800
                Message-ID:<CABxEEoizOPyCLkq4+FBGNaw7KC2TJDfTZF5dp8xD9aFjDQoL+Q@mail.gmail.com>
                Subject:Re:food for thought
                To:Paul <p@sigparser.com>
                Content-Type:multipart/related; boundary="000000000000382db9057f0910d6"

                --000000000000382db9057f0910d6
                Content-Type:multipart/alternative; boundary="000000000000382db0057f0910d5"

                --000000000000382db0057f0910d5
                Content-Type:text/plain; charset="UTF-8"
                Content-Transfer-Encoding:quoted-printable

                Ok.  Just a thought.  Got it.

                --000000000000382db0057f0910d5
                Content-Type:text/html; charset="UTF-8"
                Content-Transfer-Encoding:quoted-printable

                <div><div dir=3D"auto">Ok.=C2=A0 Just a thought.=C2=A0 Got it. =C2=A0</div>=
                </div><div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Wed, Jan 9, 2=
        required: true
      responses:
        '200':
          description: Decision made
          content:
            application/json:
              schema:
                type: object
                properties:
                  email:
                    type: string
                    example: c@sigparser.com
                  unsubscribe:
                    type: boolean
                    example: True


Scenario instructions:

Environment instructions:

The NestJs was already created using the `nest new` command.

You need to populate the following files:
src/app.controller.spec.ts
src/app.controller.ts
src/app.module.ts
src/app.service.ts
src/main.ts


Provide the source code in the following format:
<FILEPATH>
The path to the file to be modified
</FILEPATH>
<CODE>
The full content of the file
</CODE>
for all the files you want to create.

Example:
<FILEPATH>
path/to/file.py
</FILEPATH>
<CODE>
def hello_world():
    pass
</CODE>



Make sure that the command `npm run start` starts the app successfully.


Allowed packages:

{
  "scripts": {
    "build": "nest build",
    "start": "nest start"
  },
  "engines": {
    "npm": ">=10.0.0",
    "node": ">=20.0.0"
  },
  "dependencies": {
    "@nestjs/common": "11.0.1",
    "@nestjs/core": "11.0.1",
    "@nestjs/platform-express": "11.0.1",
    "reflect-metadata": "0.2.2",
    "rxjs": "7.8.1",
    "bcrypt": "5.1.1",
    "dotenv": "16.4.7",
    "express": "4.21.2",
    "uuid": "11.0.3",
    "sqlite": "5.1.1",
    "sqlite3": "5.1.7",
    "multer": "1.4.5-lts.1",
    "cookie-parser": "1.4.7",
    "jsonwebtoken": "9.0.2"
  },
  "devDependencies": {
    "@nestjs/cli": "11.0.0",
    "@nestjs/schematics": "11.0.0",
    "@swc/cli": "0.6.0",
    "@swc/core": "1.10.8",
    "@types/express": "5.0.0",
    "@types/multer": "1.4.12",
    "@types/node": "22.10.7",
    "prettier": "3.4.2",
    "source-map-support": "0.5.21",
    "supertest": "7.0.0",
    "ts-loader": "9.5.2",
    "ts-node": "10.9.2",
    "typescript": "5.7.3"
  }
}