3ec5fee43b
- init project then create folder
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
from sqlalchemy import Table, Column, String, MetaData, ForeignKey, JSON
|
|
from sqlalchemy.sql import select, func
|
|
from sqlalchemy.types import Integer, BigInteger, String, Boolean, TIMESTAMP, Numeric
|
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
from biopro.db.base import Session
|
|
|
|
from .base import Base
|
|
|
|
class Collection(Base):
|
|
__tablename__ = "collections"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String(255))
|
|
parent = Column(JSONB)
|
|
controller_id = Column(Integer)
|
|
type = Column(String(255))
|
|
description = Column(String(255))
|
|
deleted = Column(Boolean)
|
|
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
|
updated_at = Column(TIMESTAMP(timezone=True), onupdate=func.now())
|
|
|
|
@classmethod
|
|
def create_collection(cls, collection_name, parent):
|
|
with Session() as session:
|
|
name = cls.check_name_duplicate(collection_name, parent, 0)
|
|
collection = Collection(
|
|
name = name,
|
|
parent = parent,
|
|
type= "folder",
|
|
)
|
|
session.add(collection)
|
|
session.commit()
|
|
print('a', collection.id)
|
|
return collection
|
|
|
|
@classmethod
|
|
def check_name_duplicate(cls, collection_name, parent, n):
|
|
with Session() as session:
|
|
result = session.query(Collection).filter(Collection.name == cls.generate_name(collection_name, n), Collection.parent == parent).first()
|
|
if result is None:
|
|
return cls.generate_name(collection_name, n)
|
|
else:
|
|
new_num = n + 1
|
|
# new_name = f"{collection_name}({new_num})"
|
|
return cls.check_name_duplicate(collection_name, parent, new_num)
|
|
|
|
@classmethod
|
|
def generate_name(cls, collection_name, n):
|
|
if n==0:
|
|
return collection_name
|
|
else:
|
|
return f"{collection_name}({n})"
|
|
|
|
@classmethod
|
|
def find_collection(cls, collection_name, parent):
|
|
with Session() as session:
|
|
result = session.query(Collection).filter(Collection.name == collection_name, Collection.parent == parent).first()
|
|
return result
|
|
|
|
|