Skip to content

Commit

Permalink
Merge pull request #946 from hngprojects/dev
Browse files Browse the repository at this point in the history
chore: Merge dev branch into staging branch
  • Loading branch information
trevorjob authored Aug 23, 2024
2 parents 96ef942 + fd78c63 commit 9a9ab7e
Show file tree
Hide file tree
Showing 37 changed files with 1,254 additions and 306 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ share/python-wheels/
.installed.cfg
*.egg
MANIFEST
test_case1.py
api/core/dependencies/mailjet.py
tests/v1/waitlist/waitlist_test.py

# PyInstaller
# Usually these files are written by a python script from a template
Expand All @@ -36,6 +38,7 @@ api/core/dependencies/mailjet.py

# Installer logs
pip-log.txt
test_case1.py
pip-delete-this-directory.txt

# Unit test / coverage reports
Expand Down
51 changes: 51 additions & 0 deletions api/core/dependencies/email/templates/faq-feedback.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{% extends 'admin-base.html' %}

{% block title %}
Magic Link
{% endblock %}

{% block content %}
<div class="container"
style="
width: 100%;
max-width: 600px;
margin: auto;
padding: 20px;
font-family: Arial, sans-serif;
color: #333;
">
<div class="header"
style="
text-align: center;
padding-bottom: 20px;
">
<h2>Dear {{ full_name }},</h2>
<p>Thank you for your inquiry! We're processing your request, and here's a copy of for your records:</p>
</div>
<div class="content"
style="
margin-bottom: 20px;
">
<h3>User Details</h3>
<ul>
<li><span class="highlight"
style="
font-weight: bold; color: #333;
">
Full Name:</span> {{ full_name }}</li>
<li>
<span class="highlight"
style="
font-weight: bold; color: #333;
">
Email:</span> {{ email }}
</li>
</ul>
<h3>Message</h3>
<p class="message" style="margin-top: 10px;">
{{ message }}
</p>
</div>
</div>
{% endblock %}

42 changes: 42 additions & 0 deletions api/core/dependencies/email/templates/profile_recovery_email.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{% extends 'base.html' %}

{% block title %}Recovery Email Verification{% endblock %}
{% block style %}<link rel="stylesheet" href="{{ url_for('email_static', path='css/email-verification.css') }}">{% endblock %}

{% block content %}
<div class="template-main">
<div class="heading">
<p class="template-header">Recovery Email Verification</p>
</div>
<div class="content">
<p class="template-receiver-name">Hi {{ first_name }} {{ last_name }},</p>
<p class="template-message">
You have requested to change the recovery email on your profile.
</p>
<div class="editable-content">
<p>
This link will expire 5 minutes from when this email was been sent. If
you did not make this request, you can ignore this email.
</p>
<p>To change your recovery email, please click the button below:</p>
<a href="{{ link }}"><button
style="
display: inline-block;
padding: 10px 200px;
background-color: orangered;
color: #fff;
text-decoration: none;
border-radius: 10px;
">Change Recovery Email</button></a>
<p>
Or copy this link into your browser:
{{ link }}
</p>
<div class="template-farewell">
<p>Regards,</p>
<p>Boilerplate</p>
</div>
</div>
</div>
</div>
{% endblock %}
45 changes: 45 additions & 0 deletions api/core/dependencies/email/templates/unsubscribe.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{% extends 'base.html' %} {% block title %}Welcome{% endblock %} {% block
content %}
<table role="presentation" width="100%" style="padding: 3.5rem">
<tr>
<td>
<div style="text-align: center; margin-bottom: 1.5rem">
<h1 style="font-size: 1.5rem; color: #0a0a0a; font-weight: 600">
Hello From The Boilerplate
</h1>
<p
style="
font-size: 1.125rem;
color: rgba(0, 0, 0, 0.8);
font-weight: 500;
"
>
Unsubscription Successful
</p>
</div>

<div>
<p style="color: #111; font-size: 1.125rem; font-weight: 600">
Hi Hope this find you well.
</p>
<p style="color: rgba(17, 17, 17, 0.9); font-weight: 400">
You have successfully Unsubscribed from our email newsletter.
</p>
<p style="color: rgba(17, 17, 17, 0.9); font-weight: 400">
This emai is a confirmation of that action. As you will not recieve
any newsletter updates from us anymore.
</p>
</div>

<!-- <div style="margin-top: 2rem;">
<p style="color: #111; font-size: 0.875rem; font-weight: 500;">Thank you for joining Boilerplate</p>
</div> -->

<div style="margin-top: 2rem">
<p>Regards,</p>
<p>Boilerplate</p>
</div>
</td>
</tr>
</table>
{% endblock %}
56 changes: 56 additions & 0 deletions api/core/dependencies/email/templates/waitlist.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{% extends 'base.html' %}

{% block title %}Welcome{% endblock %}

{% block content %}
<table role="presentation" width="100%" style="padding: 3.5rem;">
<tr>
<td>
<div style="text-align: center; margin-bottom: 1.5rem;">
<h1 style="font-size: 1.5rem; color: #0A0A0A; font-weight: 600;">Welcome to Boilerplate Waitlist</h1>
<p style="font-size: 1.125rem; color: rgba(0, 0, 0, 0.8); font-weight: 500;">Thanks for signing up</p>
</div>

<div>
<p style="color: #111; font-size: 1.125rem; font-weight: 600;">Hi {{name}}</p>
<p style="color: rgba(17, 17, 17, 0.9); font-weight: 400;">We're thrilled to have you join our waitlist. Experience quality and innovation
like never before. Our product is made to fit your needs and make your
life easier.</p>
</div>

<div style="margin-bottom: 1.75rem;">
<h3 style="color: #0A0A0A; font-weight: 600;">Here's what you can look forward to.</h3>
<div style="margin-bottom: 1.25rem;">
<ul>
<li>
<span style="font-weight: 600;">Exclusive Offers:</span> Enjoy special promotions and
discounts available only to our members.
</li>
<li>
<span style="font-weight: 600;">Exclusive Offers:</span> Enjoy special promotions and
discounts available only to our members.
</li>
<li>
<span style="font-weight: 600;">Exclusive Offers:</span> Enjoy special promotions and
discounts available only to our members.
</li>
</ul>
</div>
</div>

<a href="{{cta_link}}" style="display: block; width: fit-content; padding: 0.5rem 2.5rem; background-color: #F97316; color: white; text-decoration: none; border-radius: 0.5rem; margin: 0 auto; text-align: center;">
Learn more about us
</a>

<!-- <div style="margin-top: 2rem;">
<p style="color: #111; font-size: 0.875rem; font-weight: 500;">Thank you for joining Boilerplate</p>
</div> -->

<div style="margin-top: 2rem;">
<p>Regards,</p>
<p>Boilerplate</p>
</div>
</td>
</tr>
</table>
{% endblock %}
4 changes: 2 additions & 2 deletions api/core/dependencies/email_sender.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from typing import Optional
from fastapi_mail import FastMail, MessageSchema, ConnectionConfig, MessageType

from api.utils.settings import settings
from premailer import transform



async def send_email(
Expand All @@ -11,7 +12,6 @@ async def send_email(
context: Optional[dict] = None
):
from main import email_templates
from premailer import transform

conf = ConnectionConfig(
MAIL_USERNAME=settings.MAIL_USERNAME,
Expand Down
24 changes: 23 additions & 1 deletion api/utils/send_mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,26 @@ def send_mail_handler(sender, reciever, html, subject):

with smtplib.SMTP_SSL(settings.MAIL_SERVER, settings.MAIL_PORT) as server:
server.login(settings.MAIL_USERNAME, settings.MAIL_PASSWORD)
server.sendmail(sender, reciever, message.as_string())
server.sendmail(sender, reciever, message.as_string())


def send_faq_inquiry_mail(context: dict):
from main import email_templates
sender_email = settings.MAIL_USERNAME
receiver_email = context.get('email')
password = settings.MAIL_PASSWORD

html = email_templates.get_template("faq-feedback.html").render(context)

message = MIMEMultipart("alternative")
message["Subject"] = "We've received your inquiry"
message["From"] = sender_email
message["To"] = receiver_email

part = MIMEText(html, "html")

message.attach(part)

with smtplib.SMTP_SSL(settings.MAIL_SERVER, settings.MAIL_PORT) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
1 change: 1 addition & 0 deletions api/v1/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@
from api.v1.models.privacy import PrivacyPolicy
from api.v1.models.terms import TermsAndConditions
from api.v1.models.reset_password_token import ResetPasswordToken
from api.v1.models.faq_inquiries import FAQInquiries
10 changes: 10 additions & 0 deletions api/v1/models/faq_inquiries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from sqlalchemy import Column, String, Text
from api.v1.models.base_model import BaseTableModel


class FAQInquiries(BaseTableModel):
__tablename__ = "faq_inquiries"

email = Column(String, nullable=False)
full_name = Column(String, nullable=False)
message = Column(Text, nullable=False)
6 changes: 4 additions & 2 deletions api/v1/models/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ class Profile(BaseTableModel):
phone_number = Column(String, nullable=True)
avatar_url = Column(String, nullable=True)
recovery_email = Column(String, nullable=True)
created_at = Column(DateTime, default=func.now())
updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
facebook_link = Column(String, nullable=True)
instagram_link = Column(String, nullable=True)
twitter_link = Column(String, nullable=True)
linkedin_link = Column(String, nullable=True)

user = relationship("User", back_populates="profile")

Expand Down
2 changes: 2 additions & 0 deletions api/v1/routes/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from api.v1.routes.team import team
from fastapi import APIRouter
from api.v1.routes.auth import auth
from api.v1.routes.faq_inquiries import faq_inquiries
from api.v1.routes.newsletter import newsletter, news_sub
from api.v1.routes.user import user_router
from api.v1.routes.product import product, non_organisation_product
Expand Down Expand Up @@ -48,6 +49,7 @@
api_version_one = APIRouter(prefix="/api/v1")

api_version_one.include_router(auth)
api_version_one.include_router(faq_inquiries)
api_version_one.include_router(google_auth)
api_version_one.include_router(fb_auth)
api_version_one.include_router(pwd_reset)
Expand Down
Loading

0 comments on commit 9a9ab7e

Please sign in to comment.