[update]: Database schema

This commit is contained in:
VivianDee
2025-03-28 15:49:37 +01:00
parent bc8f8e2cdd
commit 68ad9e35a1
8 changed files with 38 additions and 42 deletions
+1 -1
View File
@@ -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
+3 -4
View File
@@ -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(
+3 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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}>'
+3 -4
View File
@@ -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
View File
@@ -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:
@@ -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 ###