base_api.py 2.11 KiB
from flask import jsonify, request
from flask_restful import Resource
from ...db.database_handler import DatabaseHandler
from ...db.db_utils import RequestValidator, RequestTransformer, KeysTransformer
import json
class BaseAPI(Resource):
    def __init__(self, table, pool, db_handler=None):
        if table:
            self._table = table
            self._db_handler = db_handler if db_handler else DatabaseHandler(self._table, pool)
            self._request_validator = RequestValidator(self._table)
            self._request_transformer = RequestTransformer(self._table)
            self._keys_transformer = KeysTransformer(self._table)
    def get(self, codigo=None):
        if codigo and codigo.isnumeric():
            res = self._db_handler.get({ 'codigo': codigo })
            return self._modify_res(res, 'GET')
        res = self._db_handler.get(None)
        return self._modify_res(res, 'GET')
    def post(self):
        res = self._post_put()
        return self._modify_res(res, 'POST')
    def put(self, codigo):
        req = request.get_json(force=True)
        req['codigo'] = codigo
        res = self._post_put()
        return self._modify_res(res, 'PUT')
    def delete(self, codigo):
        res = self._db_handler.delete(codigo)
        return self._modify_res(res, 'DELETE')
    def _modify_req_body(self, body):
        return body
    def _modify_res(self, res, method=None):
        return res
    def _post_put(self, json_body=None):
        json_body = request.get_json(force=True) if not json_body else json_body
        json_body = self._treat_json(json_body)
        if not self._request_validator.validate(json_body):
            return {'mensagem': 'Corpo de requisição inválido'}, 400
        json_body = self._request_transformer.transform(json_body)
        return self._db_handler.post(json_body)
    def _treat_json(self, json_body):
        json_body = self._modify_req_body(json_body)
        json_body = self._keys_transformer.transform_keys(json_body, mode='snake')
        json_body = json_body if isinstance(json_body, dict) else json.loads(json_body)
        return json_body