From 2c34ca5f44a21fe8680fc849e89cbfd07af14b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Thu, 8 Feb 2024 18:23:19 +0100 Subject: [PATCH] [IMP] global: refactor wallet data retrieval processes Refactors wallet data retrieval processes so that the data normalization for the API is not managed by wallet and partner models anymore. --- lcc_comchain_base/models/res_partner.py | 34 ----------------- .../models/res_partner_backend.py | 2 +- lcc_comchain_base/services/__init__.py | 2 + lcc_comchain_base/services/auth_services.py | 19 ++++++++++ .../services/partner_services.py | 33 ++++++++++++++++ lcc_cyclos_base/models/res_partner.py | 38 ------------------- lcc_cyclos_base/models/res_partner_backend.py | 2 +- lcc_cyclos_base/services/__init__.py | 2 + lcc_cyclos_base/services/auth_services.py | 27 +++++++++++++ lcc_cyclos_base/services/partner_services.py | 30 +++++++++++++++ .../models/res_partner.py | 9 ----- .../services/auth_services.py | 8 +++- .../services/partner_services.py | 20 +++++++--- 13 files changed, 135 insertions(+), 91 deletions(-) create mode 100644 lcc_comchain_base/services/auth_services.py create mode 100644 lcc_comchain_base/services/partner_services.py create mode 100644 lcc_cyclos_base/services/auth_services.py create mode 100644 lcc_cyclos_base/services/partner_services.py diff --git a/lcc_comchain_base/models/res_partner.py b/lcc_comchain_base/models/res_partner.py index db868de9..31b3acc1 100644 --- a/lcc_comchain_base/models/res_partner.py +++ b/lcc_comchain_base/models/res_partner.py @@ -11,40 +11,6 @@ class ResPartner(models.Model): _inherit = "res.partner" - def _update_auth_data(self, password): - self.ensure_one() - data = super(ResPartner, self)._update_auth_data(password) - wallets = self.get_wallets("comchain") - if len(wallets) == 0: - data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data) - if wallets: - for wallet in wallets: - data.extend(wallet.comchain_backend_accounts_data) - return data - - def _update_search_data(self, backend_keys): - self.ensure_one() - _logger.debug("SEARCH: backend_keys = %s" % backend_keys) - data = super(ResPartner, self)._update_search_data(backend_keys) - wallets = self.get_wallets("comchain") - for wallet in wallets: - if wallet.comchain_id: - for backend_key in backend_keys: - if backend_key.startswith("comchain:"): - data[backend_key] = [wallet.comchain_id] - _logger.debug("SEARCH: data %s" % data) - return data - - def _get_backend_credentials(self): - self.ensure_one() - data = super(ResPartner, self)._get_backend_credentials() - wallets = self.get_wallets("comchain") - if len(wallets) == 0: - data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data) - for wallet in wallets: - data.extend(wallet.comchain_backend_accounts_data) - return data - def backends(self): self.ensure_one() backends = super(ResPartner, self).backends() diff --git a/lcc_comchain_base/models/res_partner_backend.py b/lcc_comchain_base/models/res_partner_backend.py index ec0449cb..e344f3c7 100644 --- a/lcc_comchain_base/models/res_partner_backend.py +++ b/lcc_comchain_base/models/res_partner_backend.py @@ -50,7 +50,7 @@ def comchain_backend_accounts_data(self): if not backend_id: ## Comchain financial backend is not configured in general settings return [] - comchain_product = self.env.ref("lcc_comchain_base.product_product_comchain") + comchain_product = self.env.ref("lcc_comchain_base.product_product_comchain").sudo() data = { "type": backend_id, "accounts": [], diff --git a/lcc_comchain_base/services/__init__.py b/lcc_comchain_base/services/__init__.py index fd8f24c5..c8d1554b 100644 --- a/lcc_comchain_base/services/__init__.py +++ b/lcc_comchain_base/services/__init__.py @@ -1 +1,3 @@ from . import comchain_services +from . import auth_services +from . import partner_services diff --git a/lcc_comchain_base/services/auth_services.py b/lcc_comchain_base/services/auth_services.py new file mode 100644 index 00000000..16ef8d6e --- /dev/null +++ b/lcc_comchain_base/services/auth_services.py @@ -0,0 +1,19 @@ +import logging + +from odoo.addons.component.core import Component +from odoo.addons.lcc_lokavaluto_app_connection.services.auth_services import AuthService + +_logger = logging.getLogger(__name__) + + +class AuthService(Component): + _inherit = "auth.service" + + def _update_auth_data(self, partner, password): + data = super(AuthService, self)._update_auth_data(partner, password) + wallets = partner.get_wallets("comchain") + if len(wallets) == 0: + data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data) + for wallet in wallets: + data.extend(wallet.comchain_backend_accounts_data) + return data diff --git a/lcc_comchain_base/services/partner_services.py b/lcc_comchain_base/services/partner_services.py new file mode 100644 index 00000000..d0ce2472 --- /dev/null +++ b/lcc_comchain_base/services/partner_services.py @@ -0,0 +1,33 @@ +import logging + +from odoo.addons.component.core import Component +from odoo.addons.lcc_lokavaluto_app_connection.services.partner_services import ( + PartnerService, +) + +_logger = logging.getLogger(__name__) + + +class PartnerService(Component): + _inherit = "partner.service" + + def _update_search_data(self, partner, backend_keys): + _logger.debug("SEARCH: backend_keys = %s" % backend_keys) + data = super(PartnerService, self)._update_search_data(partner, backend_keys) + wallets = partner.get_wallets("comchain") + for wallet in wallets: + if wallet.comchain_id: + for backend_key in backend_keys: + if backend_key.startswith("comchain:"): + data[backend_key] = [wallet.comchain_id] + _logger.debug("SEARCH: data %s" % data) + return data + + def _get_backend_credentials(self, partner): + data = super(PartnerService, self)._get_backend_credentials(partner) + wallets = partner.get_wallets("comchain") + if len(wallets) == 0: + data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data) + for wallet in wallets: + data.extend(wallet.comchain_backend_accounts_data) + return data diff --git a/lcc_cyclos_base/models/res_partner.py b/lcc_cyclos_base/models/res_partner.py index dc517ef3..1a83193c 100644 --- a/lcc_cyclos_base/models/res_partner.py +++ b/lcc_cyclos_base/models/res_partner.py @@ -13,44 +13,6 @@ class ResPartner(models.Model): _inherit = "res.partner" - def _update_auth_data(self, password): - self.ensure_one() - data = super(ResPartner, self)._update_auth_data(password) - # Update cyclos password with odoo one from authenticate session - wallets = self.get_wallets("cyclos") - if len(wallets) == 0: - data.extend(self.env["res.partner.backend"].cyclos_backend_json_data) - for wallet in wallets: - wallet_json_data = wallet.cyclos_backend_json_data - if wallet and wallet_json_data: - wallet.force_cyclos_password(password) - new_token = wallet.cyclos_create_user_token(self.id, password) - if new_token: - for ua in wallet_json_data[0]["accounts"]: - ua["token"] = new_token - data.extend(wallet_json_data) - return data - - def _get_backend_credentials(self): - self.ensure_one() - data = super(ResPartner, self)._get_backend_credentials() - wallets = self.get_wallets("cyclos") - if len(wallets) == 0: - data.extend(self.env["res.partner.backend"].cyclos_backend_json_data) - for wallet in wallets: - data.extend(wallet.cyclos_backend_json_data) - return data - - def _update_search_data(self, backend_keys): - self.ensure_one() - data = super(ResPartner, self)._update_search_data(backend_keys) - wallets = self.get_wallets("cyclos") - for wallet in wallets: - for backend_key in backend_keys: - if backend_key.startswith("cyclos:") and wallets.cyclos_id: - data[backend_key] = [wallet.cyclos_id] - return data - def backends(self): self.ensure_one() backends = super(ResPartner, self).backends() diff --git a/lcc_cyclos_base/models/res_partner_backend.py b/lcc_cyclos_base/models/res_partner_backend.py index c186a4af..ef704494 100644 --- a/lcc_cyclos_base/models/res_partner_backend.py +++ b/lcc_cyclos_base/models/res_partner_backend.py @@ -25,7 +25,7 @@ def cyclos_backend_json_data(self): if not cyclos_server_url: ## Cyclos financial backend is not configured in general settings return [] - cyclos_product = self.env.ref("lcc_cyclos_base.product_product_cyclos") + cyclos_product = self.env.ref("lcc_cyclos_base.product_product_cyclos").sudo() data = { "type": "cyclos", "accounts": [], diff --git a/lcc_cyclos_base/services/__init__.py b/lcc_cyclos_base/services/__init__.py index a3f5717e..14bd7a71 100644 --- a/lcc_cyclos_base/services/__init__.py +++ b/lcc_cyclos_base/services/__init__.py @@ -1 +1,3 @@ from . import cyclos_services +from . import auth_services +from . import partner_services diff --git a/lcc_cyclos_base/services/auth_services.py b/lcc_cyclos_base/services/auth_services.py new file mode 100644 index 00000000..4873e5c7 --- /dev/null +++ b/lcc_cyclos_base/services/auth_services.py @@ -0,0 +1,27 @@ +import logging + +from odoo.addons.component.core import Component +from odoo.addons.lcc_lokavaluto_app_connection.services.auth_services import AuthService + +_logger = logging.getLogger(__name__) + + +class AuthService(Component): + _inherit = "auth.service" + + def _update_auth_data(self, partner, password): + data = super(AuthService, self)._update_auth_data(partner, password) + # Update cyclos password with odoo one from authenticate session + wallets = partner.get_wallets("cyclos") + if len(wallets) == 0: + data.extend(self.env["res.partner.backend"].cyclos_backend_json_data) + for wallet in wallets: + wallet_json_data = wallet.cyclos_backend_json_data + if wallet and wallet_json_data: + wallet.force_cyclos_password(password) + new_token = wallet.cyclos_create_user_token(partner.id, password) + if new_token: + for ua in wallet_json_data[0]["accounts"]: + ua["token"] = new_token + data.extend(wallet_json_data) + return data diff --git a/lcc_cyclos_base/services/partner_services.py b/lcc_cyclos_base/services/partner_services.py new file mode 100644 index 00000000..2b738fc2 --- /dev/null +++ b/lcc_cyclos_base/services/partner_services.py @@ -0,0 +1,30 @@ +import logging + +from odoo.addons.component.core import Component +from odoo.addons.lcc_lokavaluto_app_connection.services.partner_services import ( + PartnerService, +) + +_logger = logging.getLogger(__name__) + + +class PartnerService(Component): + _inherit = "partner.service" + + def _update_search_data(self, partner, backend_keys): + data = super(PartnerService, self)._update_search_data(partner, backend_keys) + wallets = partner.get_wallets("cyclos") + for wallet in wallets: + for backend_key in backend_keys: + if backend_key.startswith("cyclos:") and wallets.cyclos_id: + data[backend_key] = [wallet.cyclos_id] + return data + + def _get_backend_credentials(self, partner): + data = super(PartnerService, self)._get_backend_credentials(partner) + wallets = partner.get_wallets("cyclos") + if len(wallets) == 0: + data.extend(self.env["res.partner.backend"].cyclos_backend_json_data) + for wallet in wallets: + data.extend(wallet.cyclos_backend_json_data) + return data diff --git a/lcc_lokavaluto_app_connection/models/res_partner.py b/lcc_lokavaluto_app_connection/models/res_partner.py index 118063cf..5f78d039 100644 --- a/lcc_lokavaluto_app_connection/models/res_partner.py +++ b/lcc_lokavaluto_app_connection/models/res_partner.py @@ -85,15 +85,6 @@ def create_numeric_lcc_order(self, wallet_id, amount): ) return order_id - def _update_auth_data(self, password): - return [] - - def _get_backend_credentials(self): - return [] - - def _update_search_data(self, backend_keys): - return {} - def backends(self): return set() diff --git a/lcc_lokavaluto_app_connection/services/auth_services.py b/lcc_lokavaluto_app_connection/services/auth_services.py index 7df2170e..53e20076 100644 --- a/lcc_lokavaluto_app_connection/services/auth_services.py +++ b/lcc_lokavaluto_app_connection/services/auth_services.py @@ -39,8 +39,8 @@ def authenticate(self, **params): _logger.debug("USER: %s" % current_user) if current_user: partner = current_user.partner_id - to_add = partner._update_auth_data( - request.httprequest.authorization.password + to_add = self._update_auth_data( + partner, request.httprequest.authorization.password ) response["prefetch"] = { "backend_credentials": to_add, @@ -108,6 +108,10 @@ def reset_password(self): return {"error": error, "status": "Error"} return {"status": "OK"} + # Privates functions + def _update_auth_data(self, partner, password): + return [] + # Validator def _validator_authenticate(self): return { diff --git a/lcc_lokavaluto_app_connection/services/partner_services.py b/lcc_lokavaluto_app_connection/services/partner_services.py index 20d1a137..c9f64154 100644 --- a/lcc_lokavaluto_app_connection/services/partner_services.py +++ b/lcc_lokavaluto_app_connection/services/partner_services.py @@ -49,7 +49,7 @@ def backend_credentials(self): This method is used to authenticate and get the token for the user on mobile app. """ partner = self.env.user.partner_id - response = partner._get_backend_credentials() + response = self._get_backend_credentials(partner) return response @restapi.method( @@ -247,8 +247,9 @@ def search_recipients(self, recipients_search_info): for recipient in recipients: partner = recipient.partner_id row = partner.lcc_profile_info()[0] - row["monujo_backends"] = partner._update_search_data( - [k for k in backend_keys if k.startswith("%s:" % recipient.type)] + row["monujo_backends"] = self._update_search_data( + partner, + [k for k in backend_keys if k.startswith("%s:" % recipient.type)], ) rows.append(row) @@ -292,8 +293,9 @@ def search_recipient_by_uri(self): partner = recipients[0].partner_id recipient = partner.lcc_profile_info()[0] - recipient["monujo_backends"] = partner._update_search_data( - [k for k in backend_keys if k.startswith("%s:" % recipients[0].type)] + recipient["monujo_backends"] = self._update_search_data( + partner, + [k for k in backend_keys if k.startswith("%s:" % recipients[0].type)], ) return recipient @@ -393,7 +395,7 @@ def _get_formatted_recipients(self, recipients, backend_keys): if backend_keys: for partner in recipients: row = partner.lcc_profile_info()[0] - row["monujo_backends"] = partner._update_search_data(backend_keys) + row["monujo_backends"] = self._update_search_data(partner, backend_keys) rows.append(row) return {"count": len(rows), "rows": rows} @@ -405,6 +407,12 @@ def _prepare_params(self, params): params["%s_id" % key] = val["id"] return params + def _update_search_data(self, partner, backend_keys): + return {} + + def _get_backend_credentials(self, partner): + return [] + def _get_credit_requests(self, wallet, status): """Return data on all the opened requests of the wallets""" CreditRequestSU = self.env["credit.request"].sudo()