Metadata-Version: 2.1
Name: odoo-addon-shopinvader_router_helper
Version: 18.0.1.0.0.3
Requires-Python: >=3.10
Requires-Dist: odoo-addon-fastapi_endpoint_context==18.0.*
Requires-Dist: odoo==18.0.*
Summary: Standard helper for shopinvader routers
Home-page: https://github.com/shopinvader/odoo-shopinvader
License: AGPL-3
Author: Akretion
Classifier: Programming Language :: Python
Classifier: Framework :: Odoo
Classifier: Framework :: Odoo :: 18.0
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Development Status :: 3 - Alpha
Description-Content-Type: text/x-rst

.. image:: https://odoo-community.org/readme-banner-image
   :target: https://odoo-community.org/get-involved?utm_source=readme
   :alt: Odoo Community Association

=========================
Shopinvader Router Helper
=========================

.. 
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !! This file is generated by oca-gen-addon-readme !!
   !! changes will be overwritten.                   !!
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !! source digest: sha256:c33b824d716833af678ee79b2d3617896812e281448359c775bc38bebb516f7d
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
    :target: https://odoo-community.org/page/development-status
    :alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
    :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-shopinvader%2Fodoo--shopinvader-lightgray.png?logo=github
    :target: https://github.com/shopinvader/odoo-shopinvader/tree/18.0/shopinvader_router_helper
    :alt: shopinvader/odoo-shopinvader

|badge1| |badge2| |badge3|

Base helper for all shopinvader routers.

Simple Usage
------------

The helper can be used as-is for a simple inheritable router logic:

.. code:: python


   @router.get("/name-type/{name}/{type}")
   async def name_type(
       name: str, type: str, env: Annotated[Environment, Depends(odoo_env)]
     ):
     helper = env["shopinvader.router.name_type.helper"].new(dict(
         name=name, type=type
     ))
     return helper.fetch_data()


   class RouterHelperNameType(VirtualModel):
       _inherit = "shopinvader.router.helper"
       _name = "shopinvader.router.name_type.helper"

       name = fields.Char()
       type = fields.Selection(
           selection=[("type_1", "Type 1"), ("type_2", "Type 2")],
           default="type_1",
       )

       def fetch_data(self):
         return requests.get("https://my.api/{}/{}".format(self.name, self.type))

CRUD Usage
----------

The helper can also be used to implement a full CRUD logic. For that,
you need to define the model to use and the domain to restrict the
records operations on.

.. code:: python

   @router.post("/items/")
   async def create_item(
       item: ItemCreate, env: Annotated[Environment, Depends(odoo_env)]
     ):
     helper = env["shopinvader.router.item.helper"].new()
     return helper.create(item.dict())

   @router.get("/items/")
   async def read_items(
       env: Annotated[Environment, Depends(odoo_env)]
     ):
     helper = env["shopinvader.router.item.helper"].new()
     return helper.search()

   @router.get("/items/{item_id}")
   async def read_item(
       item_id: int, env: Annotated[Environment, Depends(odoo_env)]
     ):
     helper = env["shopinvader.router.item.helper"].new()
     return helper.get(item_id)

   @router.put("/items/{item_id}")
   async def update_item(
       item_id: int, item: ItemUpdate, env: Annotated[Environment, Depends(odoo_env)]
     ):
     helper = env["shopinvader.router.item.helper"].new()
     return helper.write(item_id, item.dict())

   @router.delete("/items/{item_id}")
   async def delete_item(
       item_id: int, env: Annotated[Environment, Depends(odoo_env)]
     ):
     helper = env["shopinvader.router.item.helper"].new()
     return helper.unlink(item_id)

   class RouterHelperItem(VirtualModel):
       _inherit = "shopinvader.router.helper"
       _name = "shopinvader.router.item.helper"

       _model = "my.item.model"

       def _domain(self):
           domain = [('api_available', '=', True)]
           domain.append(('partner_id', '=', self.partner_id.id))
           return domain

TODO
----

- Check helper usage with fastapi dependency injection system for
  cleaner code.
- More utils (pdf export, file handling, ...).

.. IMPORTANT::
   This is an alpha version, the data model and design can change at any time without warning.
   Only for development or testing purpose, do not use in production.
   `More details on development status <https://odoo-community.org/page/development-status>`_

**Table of contents**

.. contents::
   :local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/shopinvader/odoo-shopinvader/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/shopinvader/odoo-shopinvader/issues/new?body=module:%20shopinvader_router_helper%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Akretion

Contributors
------------

- Florian Mounier florian.mounier@akretion.com
- Sébastien BEAU sebastien.beau@akretion.com

Maintainers
-----------

This module is part of the `shopinvader/odoo-shopinvader <https://github.com/shopinvader/odoo-shopinvader/tree/18.0/shopinvader_router_helper>`_ project on GitHub.

You are welcome to contribute.
