minor improvements

This commit is contained in:
2023-01-28 20:47:02 +01:00
parent 6f87075711
commit 6218245ea8
5 changed files with 59 additions and 22 deletions

34
back/app/core/models.py Normal file
View File

@@ -0,0 +1,34 @@
from datetime import datetime
from beanie import Document
from pydantic import Field, validator
class CrudDocument(Document):
_id: str
created_at: datetime = Field(default=datetime.utcnow(), nullable=False)
updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False)
@validator("label", always=True, check_fields=False)
def generate_label(cls, v, values, **kwargs):
return v
class Settings:
fulltext_search = []
def text_area(*args, **kwargs):
kwargs['widget'] = {
"formlyConfig": {
"type": "textarea",
"props": {
"placeholder": "Leaving this field empty will cause formData property to be `null`",
"rows": kwargs['size'] if 'size' in kwargs else 10
}
}
}
return Field(*args, **kwargs)

View File

@@ -1,5 +1,5 @@
from beanie import PydanticObjectId
from beanie.operators import And, Or, RegEx, Eq
from beanie.operators import And, RegEx, Eq
from fastapi import APIRouter, HTTPException
from fastapi_paginate import Page, Params, add_pagination
@@ -18,6 +18,10 @@ def parse_sort(sort_by):
return fields
def Or(filters):
return {'$or': filters}
def parse_query(query: str, model):
if query is None:
return {}
@@ -40,7 +44,10 @@ def parse_query(query: str, model):
and_array.append(operand)
return And(and_array) if len(and_array) > 1 else and_array[0]
if and_array:
return And(and_array) if len(and_array) > 1 else and_array[0]
else:
return {}
def get_crud_router(model, model_create, model_read, model_update):

View File

@@ -1,11 +1,13 @@
from enum import Enum
from datetime import datetime, date
from datetime import date, datetime
from typing import List, Literal, Optional
from pymongo import TEXT, IndexModel
from pydantic import Field, BaseModel, validator
from beanie import Document, Indexed
from ..core.models import CrudDocument
class EntityType(BaseModel):
@property
@@ -55,11 +57,10 @@ class Institution(EntityType):
employees: List[Employee] = Field(default=[])
class Entity(Document):
_id: str
class Entity(CrudDocument):
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
address: Optional[str] = ""
label: str = None
address: Optional[str] = ""
@validator("label", always=True)
def generate_label(cls, v, values, **kwargs):
@@ -67,16 +68,11 @@ class Entity(Document):
return v
return values['entity_data'].label
created_at: datetime = Field(default=datetime.utcnow(), nullable=False)
updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False)
class Settings:
bson_encoders = {
date: lambda dt: dt if hasattr(dt, 'hour')
else datetime(year=dt.year, month=dt.month, day=dt.day,
hour=0, minute=0, second=0)
}
class Settings(CrudDocument.Settings):
fulltext_search = ['label']
bson_encoders = {
date: lambda dt: dt if hasattr(dt, 'hour')
else datetime(year=dt.year, month=dt.month, day=dt.day,
hour=0, minute=0, second=0)
}