mirror of
https://github.com/kevin-DL/ShortMe-URL-Shortener.git
synced 2026-01-15 04:34:44 +00:00
Initial commit
This commit is contained in:
87
app/server/db/models.py
Normal file
87
app/server/db/models.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# ------- standard library imports -------
|
||||
import random
|
||||
import string
|
||||
import secrets
|
||||
from random import choices
|
||||
from datetime import datetime
|
||||
|
||||
# ------- local imports -------
|
||||
from sqlalchemy import ForeignKey
|
||||
from .extensions import db
|
||||
|
||||
|
||||
class Url(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
original_url = db.Column(db.String(512))
|
||||
short_url = db.Column(db.String(5), unique=True)
|
||||
visits = db.Column(db.Integer, default=0)
|
||||
date_created = db.Column(db.DateTime, default=datetime.now)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.short_url = self.generate_short_url()
|
||||
|
||||
def generate_short_url(self):
|
||||
characters = string.digits + string.ascii_letters
|
||||
short_url = ''.join(choices(characters, k=5))
|
||||
url = self.query.filter_by(short_url=short_url).first()
|
||||
|
||||
if url:
|
||||
return self.generate_short_url()
|
||||
|
||||
return short_url
|
||||
|
||||
def __repr__(self):
|
||||
return f'{self.original_url}, {self.visits}'
|
||||
|
||||
|
||||
class AuthToken(db.Model):
|
||||
__tablename__ = 'auth_token'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
auth_token = db.Column(db.String(16))
|
||||
date_created = db.Column(db.DateTime, default=datetime.now)
|
||||
email_id = db.Column(db.Integer, ForeignKey('email.id'))
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.auth_token = self.generate_auth_token() if self.auth_token is None else self.auth_token
|
||||
|
||||
@staticmethod
|
||||
def generate_auth_token():
|
||||
generated_token = secrets.token_hex(16)
|
||||
return generated_token
|
||||
|
||||
def __repr__(self):
|
||||
return f'{self.auth_token}'
|
||||
|
||||
|
||||
class Email(db.Model):
|
||||
__tablename__ = 'email'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
email = db.Column(db.String(512), unique=True)
|
||||
date_created = db.Column(db.DateTime, default=datetime.now)
|
||||
is_verified = db.Column(db.Boolean, default=False)
|
||||
verification_code = db.relationship('VerificationCode', backref='email')
|
||||
auth_token = db.relationship('AuthToken', backref='email')
|
||||
|
||||
def __repr__(self):
|
||||
return f'{self.email}, {self.verification_code}, {self.auth_token}'
|
||||
|
||||
|
||||
class VerificationCode(db.Model):
|
||||
__tablename__ = 'verification_code'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
email_id = db.Column(db.Integer, ForeignKey('email.id'))
|
||||
verification_code = db.Column(db.String, unique=True)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.verification_code = self.generate_verification_code()
|
||||
|
||||
@staticmethod
|
||||
def generate_verification_code():
|
||||
verification_code = ' '.join([str(random.randint(0, 999)).zfill(3) for _ in range(2)])
|
||||
return verification_code
|
||||
|
||||
def __repr__(self):
|
||||
return f'{self.verification_code}'
|
||||
Reference in New Issue
Block a user