[update]: Database schema
This commit is contained in:
+1
-1
@@ -24,6 +24,6 @@ class Config:
|
|||||||
|
|
||||||
SQLALCHEMY_DATABASE_URI = (
|
SQLALCHEMY_DATABASE_URI = (
|
||||||
# f"postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}"
|
# f"postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}"
|
||||||
f"postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}?options=-csearch_path%3Dflask_app"
|
f"postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}"
|
||||||
)
|
)
|
||||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
class Account(db.Model):
|
class Account(db.Model):
|
||||||
__tablename__ = 'accounts'
|
__tablename__ = 'accounts'
|
||||||
__table_args__ = {'schema': 'flask_app'}
|
|
||||||
|
|
||||||
id = db.Column(db.String(50), primary_key=True)
|
id = db.Column(db.String(50), primary_key=True)
|
||||||
customer_id = db.Column(db.String(50), nullable=False)
|
customer_id = db.Column(db.String(50), nullable=False)
|
||||||
account_type = db.Column(db.String(50))
|
account_type = db.Column(db.String(50))
|
||||||
status = db.Column(db.String(20), default='active')
|
status = db.Column(db.String(20), default='active')
|
||||||
lien_amount = db.Column(db.Float, default=0.0)
|
lien_amount = db.Column(db.Float, default=0.0)
|
||||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
||||||
|
|
||||||
# Database relationship
|
# Database relationship
|
||||||
# customer = db.relationship(
|
# customer = db.relationship(
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
class Customer(db.Model):
|
class Customer(db.Model):
|
||||||
__tablename__ = 'customers'
|
__tablename__ = 'customers'
|
||||||
__table_args__ = {'schema': 'flask_app'}
|
|
||||||
|
|
||||||
id = db.Column(db.String(50), primary_key=True)
|
id = db.Column(db.String(50), primary_key=True)
|
||||||
msisdn = db.Column(db.String(20), unique=True, nullable=False)
|
msisdn = db.Column(db.String(20), unique=True, nullable=False)
|
||||||
country_code = db.Column(db.String(3), nullable=False)
|
country_code = db.Column(db.String(3), nullable=False)
|
||||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_eligible(cls, customer_id):
|
def is_eligible(cls, customer_id):
|
||||||
|
|||||||
+3
-4
@@ -1,10 +1,9 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
|
|
||||||
class Loan(db.Model):
|
class Loan(db.Model):
|
||||||
__tablename__ = 'loans'
|
__tablename__ = 'loans'
|
||||||
__table_args__ = {'schema': 'flask_app'}
|
|
||||||
|
|
||||||
id = db.Column(db.String(50), primary_key=True)
|
id = db.Column(db.String(50), primary_key=True)
|
||||||
customer_id = db.Column(db.String(50), nullable=False)
|
customer_id = db.Column(db.String(50), nullable=False)
|
||||||
@@ -12,8 +11,8 @@ class Loan(db.Model):
|
|||||||
product_id = db.Column(db.String(20), nullable=False)
|
product_id = db.Column(db.String(20), nullable=False)
|
||||||
principal_amount = db.Column(db.Float, nullable=False)
|
principal_amount = db.Column(db.Float, nullable=False)
|
||||||
status = db.Column(db.String(20), default='pending')
|
status = db.Column(db.String(20), default='pending')
|
||||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
+7
-6
@@ -1,15 +1,16 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
class Offer(db.Model):
|
class Offer(db.Model):
|
||||||
__tablename__ = 'offers'
|
__tablename__ = 'offers'
|
||||||
__table_args__ = {'schema': 'flask_app'}
|
|
||||||
|
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
amount = db.Column(db.Float, nullable=False)
|
product_id = db.Column(db.String, nullable=False)
|
||||||
interest_rate = db.Column(db.Float, nullable=False)
|
min_amount = db.Column(db.Float, nullable=False)
|
||||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
max_amount = db.Column(db.Float, nullable=False)
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
tenor = db.Column(db.Integer, nullable=False)
|
||||||
|
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||||
|
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'<LoanOffer {self.id}>'
|
return f'<LoanOffer {self.id}>'
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
class Transaction(db.Model):
|
class Transaction(db.Model):
|
||||||
__tablename__ = 'transactions'
|
__tablename__ = 'transactions'
|
||||||
__table_args__ = {'schema': 'flask_app'}
|
|
||||||
|
|
||||||
id = db.Column(db.String(50), primary_key=True)
|
id = db.Column(db.String(50), primary_key=True)
|
||||||
account_id = db.Column(db.String(50), nullable=False)
|
account_id = db.Column(db.String(50), nullable=False)
|
||||||
type = db.Column(db.String(50), nullable=False)
|
type = db.Column(db.String(50), nullable=False)
|
||||||
amount = db.Column(db.Float, nullable=False)
|
amount = db.Column(db.Float, nullable=False)
|
||||||
status = db.Column(db.String(20), default='pending')
|
status = db.Column(db.String(20), default='pending')
|
||||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'<Transaction {self.id}>'
|
return f'<Transaction {self.id}>'
|
||||||
+1
-3
@@ -1,5 +1,3 @@
|
|||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: postgres:13
|
image: postgres:13
|
||||||
@@ -24,7 +22,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- FLASK_APP=wsgi.py
|
- FLASK_APP=wsgi.py
|
||||||
- FLASK_ENV=development
|
- FLASK_ENV=development
|
||||||
- DATABASE_URL=postgresql+psycopg2://${DATABASE_USER}:${DATABASE_PASSWORD}@db:${DATABASE_PORT}/${DATABASE_NAME}?options=-csearch_path%3Dflask_app
|
- DATABASE_URL=postgresql+psycopg2://${DATABASE_USER}:${DATABASE_PASSWORD}@db:${DATABASE_PORT}/${DATABASE_NAME}
|
||||||
volumes:
|
volumes:
|
||||||
- .:/app
|
- .:/app
|
||||||
depends_on:
|
depends_on:
|
||||||
|
|||||||
+17
-16
@@ -1,8 +1,8 @@
|
|||||||
"""Create tables
|
"""Update Offers
|
||||||
|
|
||||||
Revision ID: 4a12e1b143a4
|
Revision ID: fd58e10e4968
|
||||||
Revises:
|
Revises:
|
||||||
Create Date: 2025-03-28 09:24:49.669509
|
Create Date: 2025-03-28 15:47:35.620664
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op
|
||||||
@@ -10,7 +10,7 @@ import sqlalchemy as sa
|
|||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision = '4a12e1b143a4'
|
revision = 'fd58e10e4968'
|
||||||
down_revision = None
|
down_revision = None
|
||||||
branch_labels = None
|
branch_labels = None
|
||||||
depends_on = None
|
depends_on = None
|
||||||
@@ -26,8 +26,7 @@ def upgrade():
|
|||||||
sa.Column('lien_amount', sa.Float(), nullable=True),
|
sa.Column('lien_amount', sa.Float(), nullable=True),
|
||||||
sa.Column('created_at', sa.DateTime(), nullable=True),
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
||||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.PrimaryKeyConstraint('id')
|
||||||
schema='flask_app'
|
|
||||||
)
|
)
|
||||||
op.create_table('customers',
|
op.create_table('customers',
|
||||||
sa.Column('id', sa.String(length=50), nullable=False),
|
sa.Column('id', sa.String(length=50), nullable=False),
|
||||||
@@ -36,8 +35,7 @@ def upgrade():
|
|||||||
sa.Column('created_at', sa.DateTime(), nullable=True),
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
||||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.PrimaryKeyConstraint('id'),
|
||||||
sa.UniqueConstraint('msisdn'),
|
sa.UniqueConstraint('msisdn')
|
||||||
schema='flask_app'
|
|
||||||
)
|
)
|
||||||
op.create_table('loans',
|
op.create_table('loans',
|
||||||
sa.Column('id', sa.String(length=50), nullable=False),
|
sa.Column('id', sa.String(length=50), nullable=False),
|
||||||
@@ -48,8 +46,7 @@ def upgrade():
|
|||||||
sa.Column('status', sa.String(length=20), nullable=True),
|
sa.Column('status', sa.String(length=20), nullable=True),
|
||||||
sa.Column('created_at', sa.DateTime(), nullable=True),
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
||||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.PrimaryKeyConstraint('id')
|
||||||
schema='flask_app'
|
|
||||||
)
|
)
|
||||||
op.create_table('transactions',
|
op.create_table('transactions',
|
||||||
sa.Column('id', sa.String(length=50), nullable=False),
|
sa.Column('id', sa.String(length=50), nullable=False),
|
||||||
@@ -59,16 +56,20 @@ def upgrade():
|
|||||||
sa.Column('status', sa.String(length=20), nullable=True),
|
sa.Column('status', sa.String(length=20), nullable=True),
|
||||||
sa.Column('created_at', sa.DateTime(), nullable=True),
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
||||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint('id'),
|
sa.PrimaryKeyConstraint('id')
|
||||||
schema='flask_app'
|
|
||||||
)
|
)
|
||||||
|
op.drop_table('test')
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
def downgrade():
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
op.drop_table('transactions', schema='flask_app')
|
op.create_table('test',
|
||||||
op.drop_table('loans', schema='flask_app')
|
sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
|
||||||
op.drop_table('customers', schema='flask_app')
|
sa.Column('name', sa.VARCHAR(length=125), autoincrement=False, nullable=True)
|
||||||
op.drop_table('accounts', schema='flask_app')
|
)
|
||||||
|
op.drop_table('transactions')
|
||||||
|
op.drop_table('loans')
|
||||||
|
op.drop_table('customers')
|
||||||
|
op.drop_table('accounts')
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
Reference in New Issue
Block a user