Switching foreign jkey to PydanticObjectId

This commit is contained in:
2025-04-16 22:38:06 +02:00
parent 15b77ff09f
commit 5bdb754f1c
5 changed files with 16 additions and 13 deletions

View File

@@ -3,6 +3,7 @@ from typing import List, Literal, Optional
from enum import Enum from enum import Enum
from uuid import UUID from uuid import UUID
from beanie import PydanticObjectId
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from firm.core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry from firm.core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry
@@ -24,7 +25,7 @@ class ContractDraftStatus(str, Enum):
class DraftParty(BaseModel): class DraftParty(BaseModel):
entity_id: str = Field( entity_id: PydanticObjectId = Field(
foreignKey={ foreignKey={
"reference": { "reference": {
"resource": "entity", "resource": "entity",
@@ -35,7 +36,7 @@ class DraftParty(BaseModel):
title="Partie" title="Partie"
) )
part: str = Field(title="Rôle") part: str = Field(title="Rôle")
representative_id: str = Field( representative_id: PydanticObjectId = Field(
foreignKey={ foreignKey={
"reference": { "reference": {
"resource": "entity", "resource": "entity",
@@ -73,7 +74,7 @@ class ProvisionGenuine(BaseModel):
class ContractProvisionTemplateReference(BaseModel): class ContractProvisionTemplateReference(BaseModel):
type: Literal['template'] = ContractProvisionType.template type: Literal['template'] = ContractProvisionType.template
provision_template_id: str = Field( provision_template_id: PydanticObjectId = Field(
foreignKey={ foreignKey={
"reference": { "reference": {
"resource": "template/provision", "resource": "template/provision",

View File

@@ -16,7 +16,7 @@ class Registry:
def set_user(self, user): def set_user(self, user):
for firm in user.firms: for firm in user.firms:
if firm.instance == self.instance and firm.firm == firm: if firm.instance == self.instance and firm.firm == self.firm:
self.user = user self.user = user
self.db.user = user self.db.user = user
return return

View File

@@ -9,9 +9,9 @@ from pydantic import BaseModel, Field, computed_field
class CrudDocument(BaseModel): class CrudDocument(BaseModel):
id: Optional[PydanticObjectId] = Field(default=None) id: Optional[PydanticObjectId] = Field(default=None)
created_at: datetime = Field(default=datetime.now(UTC), nullable=False, title="Créé le") created_at: datetime = Field(default=datetime.now(UTC), nullable=False, title="Créé le")
created_by: str = Field(nullable=False, title="Créé par") created_by: Optional[PydanticObjectId] = Field(default=None, title="Créé par")
updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC), nullable=False, title="Modifié le") updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC), nullable=False, title="Modifié le")
updated_by: str = Field(nullable=False, title="Modifié par") updated_by: Optional[PydanticObjectId] = Field(default=None, title="Modifié par")
@property @property
def _id(self): def _id(self):
@@ -37,7 +37,7 @@ class CrudDocument(BaseModel):
@classmethod @classmethod
async def create(cls, db, create_schema): async def create(cls, db, create_schema):
model_dict = create_schema.model_dump() | {"created_by": db.user, "updated_by":db.user} model_dict = create_schema.model_dump() | {"created_by": db.user.id, "updated_by": db.user.id}
document = cls.model_validate(model_dict).model_dump(mode="json") document = cls.model_validate(model_dict).model_dump(mode="json")
result = await cls._get_collection(db).insert_one(document) result = await cls._get_collection(db).insert_one(document)
@@ -66,8 +66,9 @@ class CrudDocument(BaseModel):
@classmethod @classmethod
async def update(cls, db, model, update_schema): async def update(cls, db, model, update_schema):
model_dict = update_schema.model_dump(mode="json") | {"updated_by": db.user.id}
update_query = { update_query = {
"$set": {field: value for field, value in update_schema.model_dump(mode="json").items() if field!= "id" } "$set": {field: value for field, value in model_dict.items() if field!= "id" }
} }
await cls._get_collection(db).update_one({"_id": model.id}, update_query) await cls._get_collection(db).update_one({"_id": model.id}, update_query)

View File

@@ -2,7 +2,7 @@ from datetime import date, datetime
from typing import List, Literal, Optional from typing import List, Literal, Optional
from pydantic import Field, BaseModel from pydantic import Field, BaseModel
from beanie import Indexed from beanie import Indexed, PydanticObjectId
from firm.core.models import CrudDocument from firm.core.models import CrudDocument
from firm.core.filter import Filter, FilterSchema from firm.core.filter import Filter, FilterSchema
@@ -39,7 +39,7 @@ class Individual(EntityType):
class Employee(BaseModel): class Employee(BaseModel):
position: Indexed(str) = Field(title='Poste') position: Indexed(str) = Field(title='Poste')
entity_id: str = Field( entity_id: PydanticObjectId = Field(
foreignKey={ foreignKey={
"reference": { "reference": {
"resource": "entity", "resource": "entity",

View File

@@ -1,6 +1,7 @@
from typing import List from typing import List
from html import unescape from html import unescape
from beanie import PydanticObjectId
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from firm.core.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry from firm.core.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry
@@ -8,7 +9,7 @@ from firm.core.filter import Filter, FilterSchema
class PartyTemplate(BaseModel): class PartyTemplate(BaseModel):
entity_id: str = Field( entity_id: PydanticObjectId = Field(
foreignKey={ foreignKey={
"reference": { "reference": {
"resource": "entity", "resource": "entity",
@@ -19,7 +20,7 @@ class PartyTemplate(BaseModel):
title="Partie" title="Partie"
) )
part: str = Field(title="Rôle") part: str = Field(title="Rôle")
representative_id: str = Field( representative_id: PydanticObjectId = Field(
foreignKey={ foreignKey={
"reference": { "reference": {
"resource": "entity", "resource": "entity",
@@ -61,7 +62,7 @@ class ProvisionTemplate(CrudDocument):
class ProvisionTemplateReference(BaseModel): class ProvisionTemplateReference(BaseModel):
provision_template_id: str = Field( provision_template_id: PydanticObjectId = Field(
foreignKey={ foreignKey={
"reference": { "reference": {
"resource": "template/provision", "resource": "template/provision",