diff --git a/SQL/site_data.sql b/SQL/site_data.sql index 33bad3f..a5e79f6 100644 --- a/SQL/site_data.sql +++ b/SQL/site_data.sql @@ -1372,7 +1372,17 @@ grant all privileges on database merms_panel to merms_panel; - - - +CREATE TABLE signup ( + id SERIAL, + uid uuid DEFAULT uuid_generate_v4(), + email VARCHAR(100) NOT NULL, + firstname VARCHAR(25) NOT NULL, + lastname VARCHAR(25) NOT NULL, + loc INET, + status INT DEFAULT 0, + added timestamp without time zone DEFAULT now(), + updated timestamp without time zone DEFAULT now() + ); + ALTER TABLE ONLY signup + ADD CONSTRAINT signup_id_key UNIQUE (id); diff --git a/app/models/__init__.py b/app/models/__init__.py index 7c1b3a6..84d9dcf 100644 --- a/app/models/__init__.py +++ b/app/models/__init__.py @@ -22,10 +22,11 @@ from .custom_templates import CustomTemplates from .products_colorstyle import ProductsColorStyle from .country import Country from .members_webfiles import MembersWebfiles +from .signup import Signup __all__ = ['Members', 'Account', 'Products', 'MembersProducts', 'MembersActions', 'MembersPending', 'ProductsDetails', - 'ProvisionActions', 'MembersProductsRefresh', 'MembersProductsSettings', + 'ProvisionActions', 'MembersProductsRefresh', 'MembersProductsSettings', 'Signup', 'PasswordReset', 'MembersProfile', 'SubscriptionOptions', 'SubscriptionOptionsItems', 'ProductsTemplates', 'ProductsColorStyle', 'Payments', 'PaymentsSession', 'SubscriptionGenerative', 'GenerativeResults', diff --git a/app/models/members.py b/app/models/members.py index 9cb481e..bb60d99 100644 --- a/app/models/members.py +++ b/app/models/members.py @@ -20,7 +20,7 @@ class Members(db.Model): email = db.Column(db.String(100), nullable=False) account_name = db.Column(db.String(100), nullable=True) firstname = db.Column(db.String(25), nullable=False) - lastname = db.Column(db.String(100), nullable=True) + lastname = db.Column(db.String(25), nullable=True) country = db.Column(db.String(3), nullable=True) profile_completed = db.Column(db.DateTime(timezone=False)) stripe_customer_id = db.Column(db.String(100), nullable=True) diff --git a/app/models/signup.py b/app/models/signup.py new file mode 100644 index 0000000..13c10d7 --- /dev/null +++ b/app/models/signup.py @@ -0,0 +1,61 @@ +from datetime import datetime, timezone, timedelta +from app.extensions import db +from sqlalchemy.sql import func +from sqlalchemy.exc import IntegrityError +import uuid +from app.utils.logger import logger + + +class Signup(db.Model): + __tablename__ = 'signup' + + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + uid = db.Column(db.String(150), nullable=False) + email = db.Column(db.String(100), nullable=False) + firstname = db.Column(db.String(25), nullable=False) + lastname = db.Column(db.String(25), nullable=True) + loc = db.Column(db.String(20), nullable=True) + status = db.Column(db.Integer, default=1) + added = db.Column(db.DateTime(timezone=False), server_default=func.now()) + updated = db.Column(db.DateTime(timezone=False), server_default=func.now(), onupdate=func.now()) + + + + # "account_id": self.account_id, + def to_dict(self): + return { + "id": self.id, + "uid": str(self.uid), + "loc": self.loc, + "status": self.status, + "added": self.added.isoformat() if self.added else None, + "updated": self.updated.isoformat() if self.updated else None, + "email": self.email, + "firstname": self.firstname, + "lastname": self.lastname, + } + + def __repr__(self): + return f'' + + + @classmethod + def add_signup(cls, firstname, lastname, email): + + # Save the response + signup_data = cls( + uid=str(uuid.uuid4()), + firstname=firstname, + lastname=lastname, + email=email, + added=datetime.now(timezone.utc), + updated=datetime.now(timezone.utc) + ) + + try: + db.session.add(signup_data) + except IntegrityError as err: + raise ValueError(f"Database integrity error: {err}") + return signup_data + +