Created
December 31, 2024 09:33
-
-
Save ashish-mj/32337c99c784c8f3346330e216ad8773 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import uuid | |
from datetime import datetime | |
from dotenv import load_dotenv | |
from couchbase.exceptions import DocumentExistsException | |
from src.cb import CouchbaseClient | |
from flask import Flask, request, jsonify | |
from flask_restx import Api, Resource, fields | |
from mailjet_rest import Client | |
app = Flask(__name__) | |
env_path = "./src/.env" | |
load_dotenv(env_path) | |
senderMail = os.getenv("SENDER_MAIL") | |
mailjet = Client(auth=(os.getenv("API_KEY"), os.getenv("API_SECRET")), version='v3.1') | |
api = Api(app) | |
nsProduct = api.namespace("api/v1/email", "Send Email") | |
emailInsert = api.model( | |
"emailInsert", | |
{ | |
"name": fields.String(required=True, description="Name of Customer"), | |
"mailId": fields.String(required=True, description="Mail Id of customer"), | |
}, | |
) | |
emailResponse = api.model( | |
"emailResponse", | |
{ | |
"id": fields.String(required=True, description="Audit for email sent"), | |
"mailId": fields.String(required=True, description="Mail Id of customer"), | |
"status" : fields.String(required=True, description="Email Status"), | |
"deliveredAt" : fields.String(required=True, description="Time email is delivered"), | |
"statusCode" : fields.Integer(required=True, description="Status code of SMTP") | |
}, | |
) | |
@nsProduct.route("/sendMail") | |
class Email(Resource): | |
# tag::post[] | |
@nsProduct.doc( | |
"Send Email", | |
reponses={200: "Success", 500: "Unexpected Error"}, | |
) | |
@nsProduct.expect(emailInsert, validate=True) | |
@nsProduct.marshal_with(emailResponse) | |
def post(self): | |
reqData = request.json | |
print(reqData) | |
data = { | |
'Messages': [ | |
{ | |
"From": { | |
"Email": senderMail, | |
"Name": senderMail | |
}, | |
"To": [ | |
{ | |
"Email": reqData["mailId"], | |
"Name": reqData["name"] | |
} | |
], | |
"Subject": "Greetings from DealBazaar", | |
"TextPart": f"Welcome", | |
"HTMLPart": f"<h3>Dear {reqData['name']} , Your order is successfully placed.Thank you!" | |
} | |
] | |
} | |
response = {} | |
rep = mailjet.send.create(data=data) | |
print(rep.status_code) | |
if rep.status_code==200: | |
print("Entered 1") | |
response["status"] = "SUCCESS" | |
response["deliveredAt"] = datetime.now().strftime("%d/%m/%Y %H:%M:%S") | |
elif rep.status_code==200: | |
print("Entered 2") | |
response["status"] = "SUCCESS" | |
response["deliveredAt"] = datetime.now().strftime("%d/%m/%Y %H:%M:%S") | |
else: | |
print("Entered 3") | |
response["status"] = "FAILURE" | |
response["deliveredAt"] = None | |
id = uuid.uuid4().__str__() | |
response["id"] = id | |
response["mailId"] = reqData["mailId"] | |
response["statusCode"] = rep.status_code | |
try : | |
print("Entered DB insert") | |
cb.insert(id, response) | |
print(response) | |
print("DB insert success") | |
return jsonify({"message":"Mail Accepted"}), 202 | |
except DocumentExistsException: | |
return jsonify({"message":"Mail DB failure"}), 409 | |
except Exception as e: | |
print(response) | |
print("Excepted Error") | |
print(e) | |
return jsonify({"message": f"Unexpected error: {e}"}), 500 | |
db_info = { | |
"host": os.getenv("DB_HOST"), | |
"bucket": os.getenv("BUCKET"), | |
"scope": os.getenv("SCOPE"), | |
"collection": os.getenv("COLLECTION"), | |
"username": os.getenv("USERNAME"), | |
"password": os.getenv("PASSWORD") | |
} | |
print(db_info) | |
cb = CouchbaseClient(*db_info.values()) | |
cb.connect() | |
if __name__ == "__main__": | |
app.run(debug=True,port=5004) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment