Initializing multitenant
This commit is contained in:
@@ -1,21 +1,66 @@
|
||||
from datetime import datetime
|
||||
from datetime import datetime, UTC
|
||||
from typing import Optional
|
||||
|
||||
from beanie import Document
|
||||
from pydantic import BaseModel, Field, validator
|
||||
from beanie import PydanticObjectId
|
||||
from pydantic import BaseModel, Field, computed_field
|
||||
|
||||
|
||||
class CrudDocument(Document):
|
||||
_id: str
|
||||
created_at: datetime = Field(default=datetime.utcnow(), nullable=False, title="Créé le")
|
||||
class CrudDocument(BaseModel):
|
||||
id: Optional[PydanticObjectId] = Field(alias="_id", default=None)
|
||||
created_at: datetime = Field(default=datetime.now(UTC), nullable=False, title="Créé le")
|
||||
# created_by: str
|
||||
updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False, title="Modifié le")
|
||||
# updated_by: str
|
||||
|
||||
@validator("label", always=True, check_fields=False)
|
||||
def generate_label(cls, v, values, **kwargs):
|
||||
return v
|
||||
@computed_field
|
||||
def label(self) -> str:
|
||||
return self.compute_label()
|
||||
|
||||
def compute_label(self) -> str:
|
||||
return ""
|
||||
|
||||
class Settings:
|
||||
fulltext_search = []
|
||||
|
||||
@classmethod
|
||||
def _collection_name(cls):
|
||||
return cls.__name__
|
||||
|
||||
@classmethod
|
||||
def _get_collection(cls, db):
|
||||
return db.get_collection(cls._collection_name())
|
||||
|
||||
@classmethod
|
||||
async def create(cls, db, create_schema):
|
||||
values = cls.model_validate(create_schema.model_dump()).model_dump(mode="json")
|
||||
result = await cls._get_collection(db).insert_one(values)
|
||||
|
||||
return await cls.get(db, result.inserted_id)
|
||||
|
||||
@classmethod
|
||||
def list(cls, db, filters):
|
||||
query = filters.filter(cls._get_collection(db))
|
||||
query = filters.sort(query)
|
||||
return query
|
||||
|
||||
@classmethod
|
||||
async def get(cls, db, model_id):
|
||||
return cls.model_validate(await cls._get_collection(db).find_one({"_id": model_id}))
|
||||
|
||||
@classmethod
|
||||
async def update(cls, db, model, update_schema):
|
||||
update_query = {
|
||||
"$set": {field: value for field, value in update_schema.model_dump(mode="json").items()}
|
||||
}
|
||||
|
||||
await cls._get_collection(db).update_one({"_id": model.id}, update_query)
|
||||
return await cls.get(db, model.id)
|
||||
|
||||
@classmethod
|
||||
async def delete(cls, db, model):
|
||||
await cls._get_collection(db).delete_one({"_id": model.id})
|
||||
|
||||
|
||||
|
||||
def text_area(*args, **kwargs):
|
||||
kwargs['widget'] = {
|
||||
|
||||
Reference in New Issue
Block a user