Initial commit
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import json
|
||||
from datetime import datetime
|
||||
from typing import Optional, Any, Union
|
||||
from uuid import UUID
|
||||
|
||||
#
|
||||
# def uuid_encoder():
|
||||
# print(obj)
|
||||
# if isinstance(obj, UUID):
|
||||
# # if the obj is uuid, we simply return the value of uuid
|
||||
# return obj.hex
|
||||
# return json.JSONEncoder.default(self, obj)
|
||||
#
|
||||
import jsonpatch
|
||||
from pydantic import Field
|
||||
|
||||
from core.models.base import BaseModel
|
||||
|
||||
|
||||
class DataModelPatch(BaseModel):
|
||||
id: Optional[Union[UUID, str]] = Field(alias='_id')
|
||||
patch: Optional[Any]
|
||||
ref_id: UUID
|
||||
collection: str
|
||||
owner: UUID
|
||||
created_at: Optional[datetime]
|
||||
|
||||
class DB:
|
||||
collection: str = 'revisions'
|
||||
|
||||
|
||||
async def set_revision(collection: str, old: str | dict, new: str | dict, ref_id: UUID, user_id: UUID):
|
||||
old = json.dumps(old, default=str) if isinstance(old, dict) else old
|
||||
new = json.dumps(new, default=str) if isinstance(new, dict) else new
|
||||
patch = jsonpatch.JsonPatch.from_diff(
|
||||
json.loads(new), json.loads(old)
|
||||
)
|
||||
await DataModelPatch(
|
||||
patch=json.loads(patch.to_string()),
|
||||
ref_id=str(ref_id),
|
||||
collection=collection,
|
||||
owner=str(user_id)).init_id().c_at().save()
|
||||
Reference in New Issue
Block a user