✏️ Fix: [#99] 노코드툴 모델 대규모 수정

This commit is contained in:
sm4640
2025-12-29 17:46:26 +09:00
parent 85e285e737
commit 196498d879
3 changed files with 225 additions and 90 deletions

View File

@@ -1,29 +1,85 @@
from django.db import models
# models.py
from django.utils import timezone
import mongoengine as me
class Element(me.EmbeddedDocument):
element_id = me.IntField()
element_type = me.StringField()
content = me.StringField()
css = me.DictField()
class NodeType(me.EmbeddedDocument):
"""
"type": { "resolvedName": "CraftFrame" } 형태
"""
resolvedName = me.StringField(required=True)
class CraftNode(me.EmbeddedDocument):
"""
CraftJS node 1개(값) 스키마
"""
type = me.EmbeddedDocumentField(NodeType, required=True)
isCanvas = me.BooleanField(default=False)
# props/custom/linkedNodes는 구조가 유동적이므로 dict로 저장
props = me.DictField(default=dict)
displayName = me.StringField()
custom = me.DictField(default=dict)
hidden = me.BooleanField(default=False)
# 자식 노드 id 리스트
nodes = me.ListField(me.StringField(), default=list)
# linkedNodes: { "ROOT-background": "mBIaZ3L5VU" } 같은 맵
linkedNodes = me.DictField(default=dict)
# 일부 노드에 존재 ("parent": "ROOT")
parent = me.StringField()
class Page(me.EmbeddedDocument):
cut = me.IntField()
elements = me.ListField(me.EmbeddedDocumentField(Element))
"""
pages[*] 구조:
{
"page_id": 1,
"title": "...",
"data": { "ROOT": {...}, "mBIaZ3L5VU": {...}, ... }
}
"""
page_id = me.IntField(required=True)
title = me.StringField(required=True)
# data는 nodeId -> CraftNode 맵
data = me.MapField(me.EmbeddedDocumentField(CraftNode), default=dict)
class Code(me.Document):
pages = me.ListField(me.EmbeddedDocumentField(Page))
"""
최상위 구조:
{
"keyword": [...],
"description": "...",
"pages": [...]
}
+ (기존에 쓰던 object_type/object_id 유지)
"""
pages = me.EmbeddedDocumentListField(Page, default=list)
keyword = me.ListField(me.StringField(max_length=50), default=list)
description = me.StringField(default='', blank=True)
object_type = me.StringField(choices=("portfolio", "project"))
object_id = me.StringField()
description = me.StringField(default="")
object_type = me.StringField(choices=("portfolio", "project"), required=True)
object_id = me.StringField(required=True)
created_at = me.DateTimeField(default=timezone.now)
updated_at = me.DateTimeField(default=timezone.now)
meta = {
"collection": "codes",
"indexes": [
("object_type", "object_id"),
"created_at",
"updated_at",
],
}
def save(self, *args, **kwargs):
self.updated_at = timezone.now()
return super().save(*args, **kwargs)