From 3d4fbba98eecd34280b4aa45a7277adf9cb6fc0f Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Mon, 6 Oct 2025 06:02:24 -0400 Subject: [PATCH] country model --- SQL/site_data.sql | 247 +++++++++++++++++++++++++++ app/api/routes/routes.py | 10 +- app/api/services/__init__.py | 1 + app/api/services/office_country.py | 40 +++++ app/api/services/products.py | 17 +- app/models/country.py | 7 + app/models/member_product_refresh.py | 7 +- 7 files changed, 322 insertions(+), 7 deletions(-) create mode 100644 app/api/services/office_country.py diff --git a/SQL/site_data.sql b/SQL/site_data.sql index d30138d..27be1e2 100644 --- a/SQL/site_data.sql +++ b/SQL/site_data.sql @@ -902,6 +902,253 @@ grant all privileges on database merms_panel to merms_panel; + CREATE TABLE country ( + id SERIAL, + uid uuid DEFAULT uuid_generate_v4(), + code VARCHAR(2) UNIQUE NOT NULL, + description VARCHAR(100) UNIQUE NOT NULL, + status INT DEFAULT 0, + signup INT DEFAULT 0, + added timestamp without time zone DEFAULT now() + ); + ALTER TABLE ONLY country + ADD CONSTRAINT country_id_key UNIQUE (id); + + ALTER TABLE country OWNER TO merms_panel; + + INSERT INTO country(code,description) VALUES('AC','Acension Island'); + INSERT INTO country(code,description) VALUES('AF','Afghanistan'); + INSERT INTO country(code,description) VALUES('AL','Albania'); + INSERT INTO country(code,description) VALUES('DZ','Algeria'); + INSERT INTO country(code,description) VALUES('AS','American Samoa'); + INSERT INTO country(code,description) VALUES('AD','Andorra'); + INSERT INTO country(code,description) VALUES('AO','Angola'); + INSERT INTO country(code,description) VALUES('AI','Anguilla'); + INSERT INTO country(code,description) VALUES('AG','Antigua'); + INSERT INTO country(code,description) VALUES('AR','Argentina'); + INSERT INTO country(code,description) VALUES('AM','Armenia'); + INSERT INTO country(code,description) VALUES('AW','Aruba'); + INSERT INTO country(code,description) VALUES('AT','Austria'); + INSERT INTO country(code,description) VALUES('AZ','Azerbaijan'); + INSERT INTO country(code,description) VALUES('BS','Bahamas'); + INSERT INTO country(code,description) VALUES('BH','Bahrain'); + INSERT INTO country(code,description) VALUES('BD','Bangladesh'); + INSERT INTO country(code,description) VALUES('BB','Barbados'); + INSERT INTO country(code,description) VALUES('BY','Belarus'); + INSERT INTO country(code,description) VALUES('BE','Belgium'); + INSERT INTO country(code,description) VALUES('BZ','Belize'); + INSERT INTO country(code,description) VALUES('BJ','Benin'); + INSERT INTO country(code,description) VALUES('BM','Bermuda'); + INSERT INTO country(code,description) VALUES('BT','Bhutan'); + INSERT INTO country(code,description) VALUES('BO','Bolivia'); + + INSERT INTO country(code,description) VALUES('BA','Bosnia Herzegovina'); + INSERT INTO country(code,description) VALUES('BW','Botswana'); + INSERT INTO country(code,description) VALUES('BR','Brazil'); + INSERT INTO country(code,description) VALUES('BN','Brunei'); + INSERT INTO country(code,description) VALUES('BG','Bulgaria'); + INSERT INTO country(code,description) VALUES('BF','Burkina Faso'); + INSERT INTO country(code,description) VALUES('BI','Burundi'); + INSERT INTO country(code,description) VALUES('KH','Cambodia'); + INSERT INTO country(code,description) VALUES('CM','Cameroon'); + INSERT INTO country(code,description) VALUES('CV','Cape Verde'); + INSERT INTO country(code,description) VALUES('KY','Cayman Islands'); + INSERT INTO country(code,description) VALUES('CF','Central African Republic'); + INSERT INTO country(code,description) VALUES('TD','Chad'); + INSERT INTO country(code,description) VALUES('CL','Chile'); + INSERT INTO country(code,description) VALUES('CN','China'); + INSERT INTO country(code,description) VALUES('CO','Colombia'); + INSERT INTO country(code,description) VALUES('KM','Comoros Islands'); + INSERT INTO country(code,description) VALUES('CD','Congo Democratic Republic'); + INSERT INTO country(code,description) VALUES('CG','Congo Republic'); + INSERT INTO country(code,description) VALUES('CK','Cook Islands'); + INSERT INTO country(code,description) VALUES('CR','Costa Rica'); + INSERT INTO country(code,description) VALUES('HR','Croatia'); + INSERT INTO country(code,description) VALUES('CU','Cuba'); + INSERT INTO country(code,description) VALUES('CY','Cyprus'); + INSERT INTO country(code,description) VALUES('CZ','Czech Republic'); + INSERT INTO country(code,description) VALUES('DK','Denmark'); + INSERT INTO country(code,description) VALUES('DG','Diego Garcia'); + INSERT INTO country(code,description) VALUES('DJ','Djibouti'); + INSERT INTO country(code,description) VALUES('DM','Dominica'); + INSERT INTO country(code,description) VALUES('DO','Dominican Republic'); + INSERT INTO country(code,description) VALUES('EC','Ecuador'); + INSERT INTO country(code,description) VALUES('EG','Egypt'); + INSERT INTO country(code,description) VALUES('SV','El Salvador'); + INSERT INTO country(code,description) VALUES('GQ','Equatorial Guinea'); + INSERT INTO country(code,description) VALUES('ER','Eritrea'); + INSERT INTO country(code,description) VALUES('EE','Estonia'); + INSERT INTO country(code,description) VALUES('ET','Ethiopia'); + INSERT INTO country(code,description) VALUES('FO','Faeroe Islands'); + INSERT INTO country(code,description) VALUES('FK','Falkland Islands (Malvinas)'); + + INSERT INTO country(code,description) VALUES('FJ','Fiji Islands'); + INSERT INTO country(code,description) VALUES('FI','Finland'); + INSERT INTO country(code,description) VALUES('FR','France'); + INSERT INTO country(code,description) VALUES('TF','French Antilles (Martinique)'); + INSERT INTO country(code,description) VALUES('GF','French Guiana'); + INSERT INTO country(code,description) VALUES('PF','French Polynesia'); + INSERT INTO country(code,description) VALUES('GA','Gabon'); + INSERT INTO country(code,description) VALUES('GM','Gambia'); + INSERT INTO country(code,description) VALUES('GE','Georgia'); + INSERT INTO country(code,description) VALUES('DE','Germany'); + INSERT INTO country(code,description) VALUES('GI','Gibraltar'); + INSERT INTO country(code,description) VALUES('GR','Greece'); + INSERT INTO country(code,description) VALUES('GL','Greenland'); + INSERT INTO country(code,description) VALUES('GD','Grenada'); + INSERT INTO country(code,description) VALUES('GP','Guadeloupe'); + INSERT INTO country(code,description) VALUES('GU','Guam'); + INSERT INTO country(code,description) VALUES('GT','Guatemala'); + INSERT INTO country(code,description) VALUES('GN','Guinea'); + INSERT INTO country(code,description) VALUES('GH','Ghana'); + INSERT INTO country(code,description) VALUES('GW','Guinea Bissau'); + INSERT INTO country(code,description) VALUES('GY','Guyana'); + INSERT INTO country(code,description) VALUES('HT','Haiti'); + INSERT INTO country(code,description) VALUES('HN','Honduras'); + INSERT INTO country(code,description) VALUES('HK','Hong Kong'); + INSERT INTO country(code,description) VALUES('HU','Hungary'); + INSERT INTO country(code,description) VALUES('IS','Iceland'); + INSERT INTO country(code,description) VALUES('IN','India'); + INSERT INTO country(code,description) VALUES('ID','Indonesia'); + INSERT INTO country(code,description) VALUES('IR','Iran'); + INSERT INTO country(code,description) VALUES('IQ','Iraq'); + INSERT INTO country(code,description) VALUES('IE','Ireland'); + INSERT INTO country(code,description) VALUES('IL','Israel'); + INSERT INTO country(code,description) VALUES('IT','Italy'); + INSERT INTO country(code,description) VALUES('CI','Ivory Coast'); + INSERT INTO country(code,description) VALUES('JP','Japan'); + INSERT INTO country(code,description) VALUES('JO','Jordan'); + INSERT INTO country(code,description) VALUES('KZ','Kazakhstan'); + INSERT INTO country(code,description) VALUES('KE','Kenya'); + INSERT INTO country(code,description) VALUES('KI','Kiribati'); + INSERT INTO country(code,description) VALUES('KW','Kuwait'); + INSERT INTO country(code,description) VALUES('KG','Kyrgyzstan'); + INSERT INTO country(code,description) VALUES('LA','Laos'); + INSERT INTO country(code,description) VALUES('LV','Latvia'); + INSERT INTO country(code,description) VALUES('LB','Lebanon'); + INSERT INTO country(code,description) VALUES('LS','Lesotho'); + + + INSERT INTO country(code,description) VALUES('LR','Liberia'); + INSERT INTO country(code,description) VALUES('LY','Libya'); + INSERT INTO country(code,description) VALUES('LI','Liechtenstein'); + INSERT INTO country(code,description) VALUES('LT','Lithuania'); + INSERT INTO country(code,description) VALUES('LU','Luxembourg'); + INSERT INTO country(code,description) VALUES('MO','Macau'); + INSERT INTO country(code,description) VALUES('MK','Macedonia'); + INSERT INTO country(code,description) VALUES('MG','Madagascar'); + INSERT INTO country(code,description) VALUES('MW','Malawi'); + INSERT INTO country(code,description) VALUES('MY','Malaysia'); + INSERT INTO country(code,description) VALUES('MV','Maldives'); + INSERT INTO country(code,description) VALUES('ML','Mali'); + INSERT INTO country(code,description) VALUES('MT','Malta'); + INSERT INTO country(code,description) VALUES('MH','Marshall Islands'); + INSERT INTO country(code,description) VALUES('MR','Mauritania'); + INSERT INTO country(code,description) VALUES('MU','Mauritius'); + INSERT INTO country(code,description) VALUES('MX','Mexico'); + INSERT INTO country(code,description) VALUES('MD','Moldova'); + INSERT INTO country(code,description) VALUES('MC','Monaco'); + INSERT INTO country(code,description) VALUES('MN','Mongolia'); + INSERT INTO country(code,description) VALUES('MS','Montserrat'); + INSERT INTO country(code,description) VALUES('MA','Morocco'); + INSERT INTO country(code,description) VALUES('MZ','Mozambique'); + INSERT INTO country(code,description) VALUES('MM','Myanmar'); + INSERT INTO country(code,description) VALUES('NA','Namibia'); + INSERT INTO country(code,description) VALUES('NR','Nauru'); + INSERT INTO country(code,description) VALUES('NP','Nepal'); + INSERT INTO country(code,description) VALUES('NL','Netherlands'); + INSERT INTO country(code,description) VALUES('AN','Netherlands Antilles'); + INSERT INTO country(code,description) VALUES('NC','New Caledonia'); + INSERT INTO country(code,description) VALUES('NI','Nicaragua'); + INSERT INTO country(code,description) VALUES('NE','Niger'); + INSERT INTO country(code,description) VALUES('NN','Niue'); + INSERT INTO country(code,description) VALUES('KP','North Korea'); + INSERT INTO country(code,description) VALUES('NO','Norway'); + INSERT INTO country(code,description) VALUES('OM','Oman'); + INSERT INTO country(code,description) VALUES('PK','Pakistan'); + INSERT INTO country(code,description) VALUES('PW','Palau'); + INSERT INTO country(code,description) VALUES('PL','Palestine'); + INSERT INTO country(code,description) VALUES('PA','Panama'); + INSERT INTO country(code,description) VALUES('PG','Papua New Guinea'); + INSERT INTO country(code,description) VALUES('PY','Paraguay'); + INSERT INTO country(code,description) VALUES('PE','Peru'); + INSERT INTO country(code,description) VALUES('PH','Philippines'); + INSERT INTO country(code,description) VALUES('PT','Portugal'); + INSERT INTO country(code,description) VALUES('PR','Puerto Rico'); + INSERT INTO country(code,description) VALUES('QA','Qatar'); + INSERT INTO country(code,description) VALUES('RE','Reunion Island'); + INSERT INTO country(code,description) VALUES('RO','Romania'); + + INSERT INTO country(code,description) VALUES('RU','Russia'); + INSERT INTO country(code,description) VALUES('RW','Rwanda'); + INSERT INTO country(code,description) VALUES('SH','Saint Helena'); + INSERT INTO country(code,description) VALUES('KN','Saint Kitts and Nevis'); + INSERT INTO country(code,description) VALUES('LC','Saint Lucia'); + INSERT INTO country(code,description) VALUES('SP','Saint Pierre and Miquelon'); + INSERT INTO country(code,description) VALUES('VC','Saint Vincent and The Grenadines'); + INSERT INTO country(code,description) VALUES('SM','San Marino'); + INSERT INTO country(code,description) VALUES('JM','Jamaica'); + INSERT INTO country(code,description) VALUES('ST','Sao Tome and Principe'); + INSERT INTO country(code,description) VALUES('SA','Saudi Arabia'); + INSERT INTO country(code,description) VALUES('SN','Senegal'); + INSERT INTO country(code,description) VALUES('CS','Serbia and Montenegro'); + INSERT INTO country(code,description) VALUES('SC','Seychelles'); + INSERT INTO country(code,description) VALUES('SL','Sierra Leone'); + INSERT INTO country(code,description) VALUES('SK','Slovakia'); + INSERT INTO country(code,description) VALUES('SI','Slovenia'); + INSERT INTO country(code,description) VALUES('SB','Solomon Islands'); + INSERT INTO country(code,description) VALUES('SO','Somalia'); + INSERT INTO country(code,description) VALUES('KR','South Korea'); + INSERT INTO country(code,description) VALUES('ES','Spain'); + INSERT INTO country(code,description) VALUES('LK','Sri Lanka'); + INSERT INTO country(code,description) VALUES('SD','Sudan'); + INSERT INTO country(code,description) VALUES('SR','Suriname'); + INSERT INTO country(code,description) VALUES('SZ','Swaziland'); + INSERT INTO country(code,description) VALUES('SE','Sweden'); + INSERT INTO country(code,description) VALUES('CH','Switzerland'); + INSERT INTO country(code,description) VALUES('SY','Syria'); + INSERT INTO country(code,description) VALUES('TW','Taiwan'); + INSERT INTO country(code,description) VALUES('TJ','Tajikistan'); + INSERT INTO country(code,description) VALUES('TZ','Tanzania'); + INSERT INTO country(code,description) VALUES('TH','Thailand'); + INSERT INTO country(code,description) VALUES('TG','Togo'); + INSERT INTO country(code,description) VALUES('TO','Tonga'); + INSERT INTO country(code,description) VALUES('TT','Trinidad and Tobago'); + INSERT INTO country(code,description) VALUES('TN','Tunisia'); + INSERT INTO country(code,description) VALUES('TR','Turkey'); + INSERT INTO country(code,description) VALUES('TM','Turkmenistan'); + INSERT INTO country(code,description) VALUES('TC','Turks and Caicos'); + INSERT INTO country(code,description) VALUES('TV','Tuvalu'); + INSERT INTO country(code,description) VALUES('UG','Uganda'); + INSERT INTO country(code,description) VALUES('UA','Ukraine'); + INSERT INTO country(code,description) VALUES('AE','United Arab Emirates'); + + + INSERT INTO country(code,description) VALUES('UY','Uruguay'); + INSERT INTO country(code,description) VALUES('UZ','Uzbekistan'); + INSERT INTO country(code,description) VALUES('VU','Vanuatu'); + INSERT INTO country(code,description) VALUES('VE','Venezuela'); + INSERT INTO country(code,description) VALUES('VN','Vietnam'); + INSERT INTO country(code,description) VALUES('BV','Virgin Islands (British)'); + INSERT INTO country(code,description) VALUES('VI','Virgin Islands (U.S.)'); + INSERT INTO country(code,description) VALUES('00','Virtual'); + INSERT INTO country(code,description) VALUES('WF','Wallis and Futuna'); + INSERT INTO country(code,description) VALUES('EH','Western Samoa'); + INSERT INTO country(code,description) VALUES('YE','Yemen'); + INSERT INTO country(code,description) VALUES('ZR','Zaire'); + INSERT INTO country(code,description) VALUES('ZM','Zambia'); + INSERT INTO country(code,description) VALUES('ZW','Zimbabwe'); + INSERT INTO country(code,description) VALUES('US','United States'); + INSERT INTO country(code,description) VALUES('NG','Nigeria'); + INSERT INTO country(code,description) VALUES('AU','Australia'); + INSERT INTO country(code,description) VALUES('CA','Canada'); + INSERT INTO country(code,description) VALUES('NZ','New Zealand'); + INSERT INTO country(code,description) VALUES('SG','Singapore'); + INSERT INTO country(code,description) VALUES('ZA','South Africa'); + INSERT INTO country(code,description) VALUES('GB','United Kingdom'); + + + UPDATE country SET signup=1, status = 1 WHERE code IN ('US','CA','GB', 'NG', 'NL', 'NZ', 'ZA'); diff --git a/app/api/routes/routes.py b/app/api/routes/routes.py index a9b3221..38af29c 100644 --- a/app/api/routes/routes.py +++ b/app/api/routes/routes.py @@ -13,9 +13,10 @@ from app.api.services import ( SubscriptionsService, CommonDataService, OfficeCustomerService, - GenerativesService, OfficeUsersService, OfficeTemplatesService + GenerativesService, OfficeUsersService, OfficeTemplatesService, OfficeCountryService ) from app.api.services.comments import CommentsService +from app.models import Country from app.utils.logger import logger from app.api.middlewares import enforce_json, require_auth import os @@ -381,6 +382,13 @@ def get_dashboard(): result = OfficeDashboardService.get_dashboard_data() return jsonify(result) +@api.route('/office/country', methods=['GET']) +# @token_required +def get_office_country(): + # Call the dashboard service + result = OfficeCountryService.get_office_country_list() + return jsonify(result) + @api.route('/office/customers', methods=['GET']) # @token_required diff --git a/app/api/services/__init__.py b/app/api/services/__init__.py index 4588535..62318e1 100644 --- a/app/api/services/__init__.py +++ b/app/api/services/__init__.py @@ -17,4 +17,5 @@ from app.api.services.office_customer import OfficeCustomerService from app.api.services.office_dashboard import OfficeDashboardService from app.api.services.office_users import OfficeUsersService from app.api.services.office_templates import OfficeTemplatesService +from app.api.services.office_country import OfficeCountryService diff --git a/app/api/services/office_country.py b/app/api/services/office_country.py new file mode 100644 index 0000000..94e3df2 --- /dev/null +++ b/app/api/services/office_country.py @@ -0,0 +1,40 @@ +from flask import jsonify +from app.utils.logger import logger +from app.api.services.base_service import BaseService +from sqlalchemy import func, desc +from datetime import datetime, timedelta, timezone +from app.extensions import db +from app.models import Country + + +class OfficeCountryService(BaseService): + + @staticmethod + def get_office_country_list(filters): + logger.info('ENTER API::get get_office_country_list') + try: + account_result_data =[] + account_result = Country.get_all_countries() + + if account_result: + for t in account_result: + account_result_data.append({ + 'id': t.id, + 'uid': t.uid, + 'code': t.code, + 'description': t.description, + 'status': t.status, + 'signup': t.signup, + }) + + account_result = { + "country_data":account_result_data, + } + logger.info('RETURN API::get office account view') + logger.info(account_result) + return account_result + + except Exception as e: + logger.error(f"An error occurred while get_office_country_list data: {str(e)}", exc_info=True) + return jsonify({"message": "Internal Server Error"}), 500 + diff --git a/app/api/services/products.py b/app/api/services/products.py index 1be9898..d1a1541 100644 --- a/app/api/services/products.py +++ b/app/api/services/products.py @@ -184,15 +184,22 @@ class ProductsService(BaseService): } return ResponseHelper.success(data=response_data) - MembersProductsRefresh.create_subscription_refresh(member_id,product_id, subscription_uid) - # if memberSubscription.uid != subscription_uid : + activeRefresh = MembersProductsRefresh.get_active_refresh_by_subscription_uid(subscription_uid) + if activeRefresh: + return { + "message": "Invalid Refresh", + "error_message": "Current active refresh found- please wait for 2 to 5 minutes and try again", + "member_id":member_id, + "uid": member_data.uid, + }, 400 - - #products = MembersProducts.get_member_productlist_by_member_id(member_id) + plannedRefresh = MembersProductsRefresh.create_subscription_refresh(member_id,product_id, subscription_uid) # Simulate processing response_data = { - "products_data": [], + "message": "Rebuild Planned - will be completed in 90 seconds", + "error_message": "", + "refresh_uid": plannedRefresh.uid, "member_id":member_id, "uid": member_data.uid, } diff --git a/app/models/country.py b/app/models/country.py index f3fa42c..772c0f6 100644 --- a/app/models/country.py +++ b/app/models/country.py @@ -22,6 +22,13 @@ class Country(db.Model): return None return country_list + @classmethod + def get_all_countries(cls): + country_list = cls.query.all() + if not country_list: + return None + return country_list + def to_dict(self): return { "id": self.id, diff --git a/app/models/member_product_refresh.py b/app/models/member_product_refresh.py index c8474fb..cfbdd46 100644 --- a/app/models/member_product_refresh.py +++ b/app/models/member_product_refresh.py @@ -30,7 +30,12 @@ class MembersProductsRefresh(db.Model): updated = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) - + @classmethod + def get_active_refresh_by_subscription_uid(cls, subscription_uid): + refresh_product = cls.query.filter_by(subscription_uid=str(subscription_uid), status=0).all() + if not refresh_product: + return None + return refresh_product @classmethod