Exemple #1
0
class Lead(db.Document):
    email = db.StringField(required=True, unique=True)

    airtable_id = db.StringField()
    airtable_map = dict(email='Email')

    def __str__(self):
        return f'{self.email}'
Exemple #2
0
class Role(db.Document):
    name = db.StringField(max_length=255, required=True, unique=True)
    description = db.StringField(max_length=255)
    permissions = db.ListField(db.ReferenceField(Permission), default=[])

    def __str__(self):
        return self.description

    def __unicode__(self):
        return self.description
Exemple #3
0
class Permission(db.Document):
    url = db.StringField(max_length=255, required=True, unique=True)
    name = db.StringField(max_length=80)
    description = db.StringField(max_length=255)

    def __str__(self):
        return self.description

    def __unicode__(self):
        return self.description
class CarbonFormAnswersModel(db.Document):
    meta = {
        "collection": "carbonFormAnswers",
        "indexes": [{"fields": ["workshop", "participant"], "unique": True}],
    }

    carbonFormAnswersId = db.StringField(primary_key=True, default=generate_id)
    workshop = db.LazyReferenceField(
        WorkshopModel, required=True, db_field="workshopId"
    )
    participant = db.LazyReferenceField(
        UserModel, required=True, db_field="participantId"
    )
    answers = db.DictField(required=True)
    createdAt = db.DateTimeField(default=datetime.utcnow)
    updatedAt = db.DateTimeField(default=datetime.utcnow)

    @classmethod
    def find_by_workshop_id_and_participant_id(
        cls, workshop_id: str, participant_id: str
    ) -> CarbonFormAnswersModel:
        try:
            carbon_form_answers = cls.objects.get(
                workshop=workshop_id, participant=participant_id
            )
        except db.DoesNotExist:
            carbon_form_answers = None
        return carbon_form_answers

    @classmethod
    def find_all_by_workshop_id(cls, workshop_id: str) -> QuerySet:
        return cls.objects(workshop=workshop_id).all()
Exemple #5
0
class ClassModel(db.Document):
    name = db.StringField(required=True)
    stuNum = db.IntField(default=0)

    meta = {'collection': 'class'}

    # 添加一个班级
    @staticmethod
    def add_classroom(name):
        cls = ClassModel(name=name)
        cls.save()

    # 修改班级
    @staticmethod
    def put_classroom(id, name):
        id = ObjectId(id)
        cls = ClassModel.objects(id=id)
        cls.update(name=name)

    # 删除班级
    @staticmethod
    def delete_classroom(id):
        id = ObjectId(id)
        cls = ClassModel.objects(id=id)
        cls.delete()
Exemple #6
0
class Picture(db.Document):
    openid = db.StringField(max_length=255, verbose_name='小程序使用者的id')
    url = db.StringField(max_length=512,
                         required=True,
                         verbose_name='图url',
                         unique=True)

    # 本地也保存的时候用,我们这里姑且保存一下吧
    image = db.ImageField(verbose_name='图片')
    origin_image_id = db.StringField(max_length=64,
                                     verbose_name='如果这张图是双眼皮,那这就保存双眼皮的原图')
    img_md5 = db.StringField(max_length=128, verbose_name='图片的md5唯一码,不要重复上传')
    img_type = db.StringField(max_length=64, verbose_name='图片type')
    create_time = db.DateTimeField(default=datetime.datetime.now,
                                   verbose_name='创建时间')

    def __unicode__(self):
        return self.img_name
Exemple #7
0
class User(db.Document):
    username = db.StringField(max_length=255,
                              verbose_name='用户名称',
                              required=True,
                              unique=True)
    _password = db.StringField(max_length=255, verbose_name='用户密码')
    active = db.BooleanField(default=True, verbose_name='当前账户是否激活')

    create_time = db.DateTimeField(default=datetime.datetime.now,
                                   verbose_name='创建时间')

    roles = db.ListField(db.ReferenceField(Role), default=[])

    # 给这个用户增加角色
    def add_role(self, role_names: list):
        for role_name in role_names:
            role = Role.objects(name=role_name).first()
            if not role:
                role = Role(name=role_name)
                role.save()
            self.roles.append(role)
        self.roles = list(set(self.roles))

    @staticmethod
    def register(username, password):
        new_user = User(username=username,
                        _password=generate_password_hash(password))
        new_user.save()
        return new_user

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, passwd):
        self._password = generate_password_hash(passwd)

    def check_password(self, raw):
        return check_password_hash(self._password, raw)

    def __unicode__(self):
        return str(self.username)
class WorkshopModel(db.Document):
    """
    This is an abstract class.
    Please inherit from it if you want to create a new type of workshop
    """

    meta = {"collection": "workshops"}

    workshopId = db.StringField(primary_key=True, default=generate_id)
    name = db.StringField(required=True,
                          max_length=128,
                          min_length=1,
                          default="Atelier CAPLC")
    createdAt = db.DateTimeField(default=datetime.datetime.utcnow)
    updatedAt = db.DateTimeField(default=datetime.datetime.utcnow)
    startAt = db.DateTimeField(required=True)
    creatorId = db.StringField(required=True)
    coachId = db.StringField(required=True)
    eventUrl = db.StringField(default="caplc.com")
    city = db.StringField(max_length=128, min_length=1)
    address = db.StringField(max_length=512)
    participants = db.ListField(
        db.EmbeddedDocumentField(WorkshopParticipantModel), default=[])
    model = db.ReferenceField(Model, db_field="modelId")

    def __repr__(self):
        return (
            f"<Workshop {self.workshopId} | {self.name} "
            f"- animated by {self.coachId} at {self.city} on {self.startAt} "
            f"- with {len(self.participants)} participants>")

    @classmethod
    def find_by_id(cls, workshop_id: str) -> WorkshopModel:
        try:
            workshop = cls.objects.get(workshopId=workshop_id)
        except db.DoesNotExist:
            workshop = None
        return workshop

    @classmethod
    def find_by_coach_id(cls, coach_id: str) -> WorkshopModel:
        try:
            workshops = cls.objects(coachId=coach_id)
        except db.DoesNotExist:
            workshops = []
        return workshops

    def get_participant_ids(self) -> list:
        return [p.user.id for p in self.participants]

    def get_workshop_participant(self, participant_id: str):
        for workshop_participant in self.participants:
            if workshop_participant.user.id == participant_id:
                return workshop_participant

        return None
Exemple #9
0
class BlacklistTokenModel(db.Document):
    meta = {"collection": "blacklistedTokens"}
    token = db.StringField(required=True)
    blacklistedOn = db.DateTimeField(default=datetime.datetime.utcnow)

    @classmethod
    def is_jti_blacklisted(cls, jti: str) -> bool:
        try:
            query = cls.objects.get(token=jti)
        except db.DoesNotExist:
            query = None
        return query is not None
Exemple #10
0
class ColumnZone(Base):

    meta = {
        'increase_key': False,
        'collection': 'column_zone',
        'ordering': ['-created_at'],
        'strict': True,
        'id_field': '_id'
    }

    _id = db.StringField()
    name = db.StringField(min_value=2,
                          max_value=50,
                          required=True,
                          unique=True)  # 空间标识
    title = db.StringField(min_value=2, max_value=50)  # 空间名称
    user_id = db.IntField(default=0)
    width = db.IntField(default=0)  # 图片宽
    height = db.IntField(default=0)  # 图片高
    kind = db.IntField(default=1)  # 类型:1.PC;2.备选;3.--
    status = db.IntField(default=1)
    deleted = db.IntField(default=0)
    remark = db.StringField()  # 备注

    created_at = db.DateTimeField()
    updated_at = db.DateTimeField(default=datetime.datetime.now)

    # 标记删除
    def mark_delete(self):
        ok = super(ColumnZone, self).update(deleted=1)
        return ok

    # 标记恢复
    def mark_recovery(self):
        ok = super(ColumnZone, self).update(deleted=0)
        return ok

    def __unicode__(self):
        return self.name
Exemple #11
0
class ShareModel(db.Document):
    adminId = db.ReferenceField(AdminModel, required=True)
    created_at = db.DateTimeField(default=datetime.datetime.utcnow,
                                  required=True)
    title = db.StringField(required=True)
    content = db.StringField(required=True)

    meta = {
        'collection': 'share',
        'indexes': ['-created_at'],
        'ordering': ['-created_at']
    }

    # 添加一个资源
    @staticmethod
    def add_share(data):
        adminId = ObjectId(data['adminId'])
        title = data['title']
        content = data['content']
        share = ShareModel(adminId=adminId, title=title, content=content)
        share.save()

    # 修改一个资源
    @staticmethod
    def put_share(id, data):
        id = ObjectId(id)
        adminId = ObjectId(data['adminId'])
        title = data['title']
        content = data['content']
        share = ShareModel.objects(id=id)
        share.update(adminId=adminId, title=title, content=content)

    # 删除一个资源
    @staticmethod
    def delete_share(id):
        id = ObjectId(id)
        share = ShareModel.objects(id=id)
        share.delete()
class AdminModel(db.Document):
    # _id = db.StringField()
    name = db.StringField(required=True)
    account = db.StringField(required=True)
    password = db.StringField(required=True)
    avatar = db.StringField(required=True)

    meta = {'collection': 'admin'}

    # 创建管理员账户
    @staticmethod
    def add_admin(data):
        admin = AdminModel(account=data['account'],
                           name=data['name'],
                           password=generate_password_hash(data['password']),
                           avatar=data['avatar'])
        admin.save()
        return admin

    # 验证账号密码
    @staticmethod
    def check_admin():
        pass
class ActionCardBatchModel(db.Document):
    meta = {"collection": "actionCardBatches"}

    actionCardBatchId = db.StringField(primary_key=True, default=generate_id)
    coachId = db.StringField()
    name = db.StringField(required=True)
    actionCardIds = db.ListField(db.StringField(), required=True)
    type = db.StringField(required=True)
    default = db.BooleanField()
    createdAt = db.DateTimeField(default=datetime.datetime.utcnow)
    updatedAt = db.DateTimeField(default=datetime.datetime.utcnow)

    @classmethod
    def get_default_batches(cls):
        return cls.objects(default=True).all()

    @classmethod
    def find_default_batches(cls):
        return cls.objects(default=True).all()

    @classmethod
    def find_action_card_batches_by_coach(cls, coach_id):
        return cls.objects(coachId=coach_id).all()
class ActionCardModel(db.Document):
    meta = {"collection": "actionCards"}

    actionCardId = db.StringField(primary_key=True, default=generate_id)
    cardNumber = db.IntField(required=True, min_value=0)
    name = db.StringField(required=True)
    category = db.StringField(required=True)
    type = db.StringField(required=True)
    key = db.StringField(required=True)
    sector = db.StringField(required=True)
    cost = db.IntField(required=True, min_value=0)
    createdAt = db.DateTimeField(default=datetime.datetime.utcnow)
    updatedAt = db.DateTimeField(default=datetime.datetime.utcnow)

    @classmethod
    def find_all(cls):
        return cls.objects().order_by("number")
Exemple #15
0
class Model(db.Document):
    meta = {"collection": "models"}

    modelId = db.StringField(primary_key=True, default=generate_id)
    footprintStructure = db.DictField(required=True)
    globalCarbonVariables = db.DictField(required=True)
    variableFormulas = db.DictField(required=True)
    createdAt = db.DateTimeField(default=datetime.datetime.utcnow)
    updatedAt = db.DateTimeField(default=datetime.datetime.utcnow)

    @classmethod
    def find_last_created_model(cls) -> Model:
        model = cls.objects.order_by("-createdAt").first()
        if model is None:
            raise DoesNotExist("No model in DB")
        return model

    @classmethod
    def find_by_id(cls, model_id: str) -> Model:
        try:
            model = cls.objects.get(modelId=model_id)
        except db.DoesNotExist:
            model = None
        return model
class UserModel(db.Document):
    # _id = db.StringField()
    wxId = db.StringField(required=True)
    name = db.StringField(required=True)
    avatar = db.StringField(required=True)
    schoolId = db.StringField(required=True)
    classId = db.ReferenceField(ClassModel)

    meta = {'collection': 'user', 'ordering': ['name', 'schoolId']}

    # 添加一个用户
    @staticmethod
    def add_user(data):
        wxId = data['wxId'] + current_app.config['SECRET_KEY']
        m = hashlib.md5()
        m.update(wxId.encode("utf8"))
        wxId = m.hexdigest()

        clsId = ObjectId(data['classId'])

        user = UserModel(wxId=wxId,
                         name=data['name'],
                         avatar=data['avatar'],
                         schoolId=data['schoolId'],
                         classId=clsId)
        user.save()
        # 给对应班级添加人数
        ClassModel.objects(id=clsId).update_one(inc__stuNum=1)

    # 通过 objectId 获取用户信息
    @staticmethod
    def get_user(id):
        user = UserModel.objects(id=ObjectId(id)).first()
        if not user:
            raise FormValidateError(msg='用户不存在')
        dic = {
            'id': str(user['id']),
            'name': user['name'],
            'avatar': user['avatar'],
            'schoolId': user['schoolId'],
            'classroom': str(user['classId']['name'])
        }
        return dic

    # 修改用户信息
    @staticmethod
    def put_user(id, data):
        user = UserModel.objects(id=ObjectId(id))
        origin_classId = str(user[0]['classId']['id'])
        user.update(name=data['name'],
                    avatar=data['avatar'],
                    schoolId=data['schoolId'],
                    classId=ObjectId(data['classId']))
        # 如果换了班级,则修改班级人数
        if origin_classId != str(data['classId']):
            ClassModel.objects(id=ObjectId(origin_classId)).update_one(
                dec__stuNum=1)
            ClassModel.objects(id=ObjectId(data['classId'])).update_one(
                inc__stuNum=1)

    # 通过用户id删除用户
    @staticmethod
    def delete_user(id):
        user = UserModel.objects(id=ObjectId(id))
        clsId = user[0]['classId']['id']
        user.delete()
        # 给对应班级减去人数
        ClassModel.objects(id=clsId).update_one(dec__stuNum=1)
Exemple #17
0
class SignModel(db.Document):
    name = db.StringField(required=True)
    adminId = db.ReferenceField(AdminModel)
    classroomIds = db.ListField(db.ReferenceField(ClassModel))
    signUsers = db.ListField(db.ReferenceField('UserModel'), default=[])
    token = db.StringField(required=True)
    created_at = db.DateTimeField(default=datetime.datetime.utcnow,
                                  required=True)

    meta = {
        'collection': 'sign',
        'indexes': ['-created_at'],
        'ordering': ['-created_at'],
        'strict': False
    }

    # 保存签到表到数据库
    @staticmethod
    def add_sign(data):
        name = data['name']
        adminId = ObjectId(data['adminId'])
        classroomIds = []
        for cls in data['classroomIds'].split('|'):
            classroomIds.append(ObjectId(cls))
        token = data['token']
        sign = SignModel(name=name,
                         adminId=adminId,
                         classroomIds=classroomIds,
                         token=token)
        sign.save()
        return str(sign['id'])

    # 学生签到
    @staticmethod
    def user_sign(token, userId):
        userId = ObjectId(userId)
        sign = SignModel.objects(token=token)
        sign.update_one(add_to_set__signUsers=userId)

    # 老师帮学生签到
    @staticmethod
    def super_user_sign(signId, signUsers):
        signId = ObjectId(signId)
        sign = SignModel.objects(id=signId)
        sign.update_one(add_to_set__signUsers=signUsers)

    # 老师手动删除签到
    @staticmethod
    def super_delete_user_sign(signId, signUsers):
        signId = ObjectId(signId)
        sign = SignModel.objects(id=signId)
        sign.update_one(pull_all__signUsers=signUsers)

    # 获取签到表列表
    @staticmethod
    def get_sign_list(page, size, classId):
        if classId is not None:
            classId = ObjectId(classId)
            cls = ClassModel.objects(id=classId).first()
            if cls:
                clss = SignModel.objects(
                    classroomIds__in=[classId]).order_by('-created_at').skip(
                        (page - 1) * size).limit(size)
                count = SignModel.objects(classroomIds__in=[classId]).count()
            else:
                clss = []
                count = 0
        else:
            clss = SignModel.objects().order_by('-created_at').skip(
                (page - 1) * size).limit(size)
            count = SignModel.objects().count()
        data = []
        for cls in clss:
            classrooms = []
            for room in cls['classroomIds']:
                classrooms.append({
                    'id': str(room['id']),
                    'name': room['name'],
                    'stuNum': room['stuNum']
                })
            data.append({
                'id': str(cls['id']),
                'name': cls['name'],
                'adminName': cls['adminId']['name'],
                'classrooms': classrooms,
                'created_at': cls['created_at']
            })
        res = {
            'pagination': {
                'count': count,
                'size': size,
                'page': page
            },
            'list': data
        }
        return res

    # 删除签到表
    @staticmethod
    def delete_sign(signId):
        signId = ObjectId(signId)
        sign = SignModel.objects(id=signId)
        sign.delete()
Exemple #18
0
class Product(db.Document):
    meta = {'collection': 'Product'}
    name = db.StringField(required=True)
    stock = db.IntField(required=True)
    picture = db.FileField(required=True)
    price = db.FloatField(required=True)

    @staticmethod
    def createProduct(body, picture):
        try:
            product = Product.from_json(json.dumps(body), True)
            product.picture.put(picture, filename=picture.filename.replace(" ", "_"), content_type=picture.content_type)
            product.save()
        except Exception as error:
            print(error)

        return product

    @staticmethod
    def getProduct(id):
        try:
            product = Product.objects().get(id=str(id))
            data = {}
            data["id"] = str(product.id)
            data["name"] = product.name
            data["stock"] = product.stock
            data["price"] = product.price
            data["image"] = {}
            data["image"]["url"] = f"/api/product/{str(product.id)}/image/{product.picture.filename}"
            data["image"]["name"] = product.picture.filename

        except Exception as error:
            print(error)

        return data

    @staticmethod
    def getImage(id):
        try:
            product = Product.objects().get(id=id)
        
            file = send_file(io.BytesIO(product.picture.read()),
                     attachment_filename=product.picture.filename,
                     mimetype=product.picture.content_type)

        except Exception as error:
            print(error)

        return file

    @staticmethod
    def getAllProducts():
        try:
            products = Product.objects().all()
            listProducts = []
            for product in products :
                data = {}
                data["id"] = str(product.id)
                data["name"] = product.name
                data["stock"] = product.stock
                data["price"] = product.price
                data["image"] = {}
                data["image"]["url"] = f"/api/product/{str(product.id)}/image/{product.picture.filename}"
                data["image"]["name"] = product.picture.filename

                listProducts.append(data)
            
        except Exception as error:
            print(error)

        return listProducts

    @staticmethod
    def updateProduct(id, body, picture):
        try:
            updated = {
                "count": 0
            }

            product = Product.objects().get(id=id)

            if body["name"]:
                product.name = body["name"]
                updated["name"] = "updated"
                updated["count"] += 1
            if body["stock"]:
                product.stock = int(body["stock"])
                updated["stock"] = "updated"
                updated["count"] += 1
            if body["price"]:
                product.price = float(body["price"])
                updated["price"] = "updated"
                updated["count"] += 1
            if picture:
                product.picture.replace(picture, filename=picture.filename.replace(" ", "_"), content_type=picture.content_type)
                updated["picture"] = "updated"
                updated["count"] += 1

            product.save()    
        except Exception as error:
            print(error)

        return updated

    @staticmethod
    def deleteProduct(id):
        try:
            product = Product.objects().get(id=str(id))
            
        except Exception as error:
            product = None
            print(error)

        return product
Exemple #19
0
class Sequence(db.Document):
    name = db.StringField(max_length=10, required=True, unique=True)
    val = db.IntField()
Exemple #20
0
class UserModel(db.Document):

    meta = {"collection": "users"}

    # User specific fields
    userId = db.StringField(primary_key=True, default=generate_id)
    firstName = db.StringField(required=True, max_length=64, min_length=1)
    lastName = db.StringField(required=True, max_length=64, min_length=1)
    email = db.StringField(required=True, max_length=256, unique=True)
    password = db.StringField()
    role = db.ListField(db.StringField(max_length=32), required=True)
    createdAt = db.DateTimeField(default=datetime.datetime.utcnow)
    updatedAt = db.DateTimeField(default=datetime.datetime.utcnow)

    # Coach specific fields
    city = db.StringField(max_length=256)
    workshopsCount = db.IntField()
    awarenessRaisedCount = db.IntField()

    # Participant specific fields
    workshopParticipations = db.ListField(db.StringField(), default=[])

    def __str__(self):
        return f"User {self.userId} - {self.firstName} {self.lastName}"

    def __repr__(self):
        return f"<User {self.userId} - {self.firstName} {self.lastName}>"

    def allowed(self, access_level: Roles) -> bool:
        return (max([ACCESS_LEVEL[r]
                     for r in self.role]) >= ACCESS_LEVEL[access_level.value])

    def send_reset_password_mail(self) -> str:
        # Genereate temporary access token for password resetting
        token = create_access_token(identity=self.id)
        reset_url = "{url}/reset_password?access_token={token}".format(
            url=current_app.config["PREFERRED_URL_SCHEME"], token=token)
        print(token)
        send_reset_password_mail(self.email, reset_url=reset_url)
        return token

    @classmethod
    def find_by_id(cls, user_id: str) -> UserModel:
        try:
            user = cls.objects.get(userId=user_id)
        except db.DoesNotExist:
            user = None
        return user

    @classmethod
    def find_by_email(cls, email: str) -> UserModel:
        try:
            user = cls.objects.get(email=email)
        except db.DoesNotExist:
            user = None
        return user

    @classmethod
    def find_coach_by_id(cls, user_id: str) -> UserModel:
        try:
            user = cls.objects.get(
                userId=user_id,
                role__in=[Roles.ADMIN.value, Roles.COACH.value])
        except db.DoesNotExist:
            user = None
        return user

    @classmethod
    def find_coach_by_email(cls, email: str) -> UserModel:
        try:
            user = cls.objects.get(
                email=email, role__in=[Roles.ADMIN.value, Roles.COACH.value])
        except db.DoesNotExist:
            user = None
        return user

    @classmethod
    def find_participant_by_email(cls, email: str) -> UserModel:
        try:
            user = cls.objects.get(email=email,
                                   role__in=[Roles.PARTICIPANT.value])
        except db.DoesNotExist:
            user = None
        return user

    @classmethod
    def find_all_coaches(cls) -> QuerySet:
        return cls.objects(
            role__in=[Roles.ADMIN.value, Roles.COACH.value]).all()

    def add_participant_role(self) -> None:
        """
        To use when we want to update the role of the user to participant.
        Init data specific to the participant
        :return:
        """
        self.role.append(Roles.PARTICIPANT.value)
        self.workshopParticipations = []

        return
Exemple #21
0
class User(db.Document, UserMixin):
    first_name = db.StringField(required=True)
    last_name = db.StringField(required=True)
    email = db.StringField(required=True, unique=True)
    password_hash = db.StringField(required=True)

    course_type = db.StringField(choices=COURSE_TYPES + NULL_CHOICE)
    course_date = db.StringField(choices=COURSE_DATES + NULL_CHOICE)
    country_origin = db.StringField()

    company = db.StringField()
    employment_status = db.StringField()
    academic_degree = db.StringField()
    age = db.IntField()

    entrepreneurial_essay = db.StringField()
    problem_essay = db.StringField()

    permissions = db.ListField(db.StringField(choices=PERMISSION_TYPES))

    airtable_id = db.StringField()
    airtable_map = dict(first_name='First Name',
                        last_name='Last Name',
                        course_type='Course Type',
                        company='Company',
                        employment_status='Employment Status',
                        academic_degree='Academic Degree',
                        age='Age',
                        entrepreneurial_essay='Entrepreneurial Essay',
                        problem_essay='Problems Essay')

    def __str__(self):
        return f'{self.first_name} {self.last_name}'

    @property
    def is_admin(self):
        return 'admin' in self.permissions
Exemple #22
0
class Column(Base):

    meta = {
        'increase_key': False,
        'collection': 'column',
        'ordering': ['-created_at'],
        'strict': True,
        'id_field': '_id'
    }

    _id = db.StringField()
    title = db.StringField(max_length=30)  # 标题
    sub_title = db.StringField(max_length=30)  # 副标题
    description = db.StringField()  # 简述
    target = db.StringField(max_length=1000)  # 标记,用于链接跳转或其它
    column_zone_id = db.StringField(default='')  # 空间ID
    user_id = db.IntField(default=0)
    sort = db.IntField(default=0)  # 排序
    kind = db.IntField(default=1)  # 类型:1.--;2.--;3.--
    cover_id = db.StringField(default='')  # 封面ID
    status = db.IntField(default=0)  # 是否发布:0.否;1.是;
    deleted = db.IntField(default=0)
    remark = db.StringField()  # 备注

    created_at = db.DateTimeField()
    updated_at = db.DateTimeField(default=datetime.datetime.now)

    # 封面
    def cover(self):
        if self.cover_id and len(self.cover_id) == 24:
            asset = Asset.objects(_id=ObjectId(self.cover_id)).first()
            if asset and asset.deleted == 0:
                return asset

        asset = Asset.objects(target_id=str(self._id), asset_type=7,
                              deleted=0).first()
        if asset and asset.deleted == 0:
            return asset
        return None

    # 标记删除
    def mark_delete(self):
        ok = super(Column, self).update(deleted=1)
        if ok:
            # 删除附件
            assets = Asset.objects(target_id=str(self._id),
                                   asset_type=7,
                                   deleted=0)
            for item in assets:
                item.mark_delete()

    # 标记恢复
    def mark_recovery(self):
        ok = super(Column, self).update(deleted=0)
        if ok:
            # 恢复附件
            assets = Asset.objects(target_id=str(self._id),
                                   asset_type=7,
                                   deleted=1)
            for item in assets:
                item.update(deleted=0)

    def __unicode__(self):
        return self.title
Exemple #23
0
class Client(db.Document):
    meta = {'collection': 'Client'}
    firstName = db.StringField(required=True)
    lastName = db.StringField(required=True)
    email = db.EmailField(required=True)
    creation = db.DateTimeField(required=True, default=datetime.now())

    @staticmethod
    def findAll():
        try:
            clients = Client.objects.all()
            results = []

            for client in clients:
                data = {}
                data['id'] = str(client.id)
                data['firstName'] = client.firstName
                data['lastName'] = client.lastName
                data['email'] = client.email
                data['creation'] = client.creation.strftime('%d/%m/%Y')

                results.append(data)

        except Exception as error:
            client = None

        return results

    @staticmethod
    def findById(id):
        try:
            client = Client.objects.get(id=id)

            data = {}
            data['id'] = str(client.id)
            data['firstName'] = client.firstName
            data['lastName'] = client.lastName
            data['email'] = client.email
            data['creation'] = client.creation.strftime('%d/%m/%Y')

        except Exception as error:
            client = None

        return data

    @staticmethod
    def create(body):
        try:
            client = Client.from_json(json.dumps(body), True)
            client.save()
        except Exception as error:
            print(error)
            client = None

        return client

    @staticmethod
    def update(id, body):
        try:
            updated = {"count": 0}

            client = Client.objects().get(id=id)

            if body["firstName"]:
                client.firstName = body["firstName"]
                updated["firstName"] = "updated"
                updated["count"] += 1

            if body["lastName"]:
                client.lastName = body["lastName"]
                updated["lastName"] = "lastName"
                updated["count"] += 1

            if body["email"]:
                client.email = body["email"]
                updated["email"] = "email"
                updated["count"] += 1

            client.save()

        except Exception as error:
            print(error)

        return updated

    @staticmethod
    def deleteClient(id):
        try:
            client = Client.objects().get(id=id)

        except Exception as error:
            client = None

        return client
Exemple #24
0
class CommentModel(db.Document):
    userId = db.ReferenceField(UserModel, required=True)
    topicId = db.ReferenceField(TopicModel, required=True)
    created_at = db.DateTimeField(default=datetime.datetime.utcnow,
                                  required=True)
    content = db.StringField(required=True)

    meta = {
        'collection': 'comment',
        'indexes': ['-created_at'],
        'ordering': ['-created_at']
    }

    # 创建评论
    @staticmethod
    def add_comment(data):
        userId = ObjectId(data['userId'])
        topicId = ObjectId(data['topicId'])
        content = data['content']

        comment = CommentModel(userId=userId, topicId=topicId, content=content)
        comment.save()

    # 修改评论
    @staticmethod
    def put_comment(data):
        id = ObjectId(data['id'])
        content = data['content']

        comment = CommentModel.objects(id=id)
        comment.update(content=content)

    # 删除评论
    @staticmethod
    def delete_comment(id):
        id = ObjectId(id)
        comment = CommentModel.objects(id=id)
        comment.delete()

    # 获取评论
    @staticmethod
    def get_comment_list(data):
        topicId = ObjectId(data['topicId'])
        page = int(data['page'])
        size = int(data['size'])
        count = CommentModel.objects(topicId=topicId).count()
        comments = CommentModel.objects(
            topicId=topicId).order_by('-created_at').skip(
                (page - 1) * size).limit(size)
        list = []
        for comment in comments:
            list.append({
                'id': str(comment['id']),
                'created_at': comment['created_at'],
                'userId': str(comment['userId']['id']),
                'userName': str(comment['userId']['name']),
                'schoolId': str(comment['userId']['schoolId']),
                'avatar': str(comment['userId']['avatar']),
                'className': str(comment['userId']['classId']['name']),
                'content': comment['content']
            })

        res = {
            'list': list,
            'pagination': {
                'count': count,
                'size': size,
                'page': page
            }
        }
        return res
Exemple #25
0
class Category(Base):

    meta = {
        'increase_key': True,
        'collection': 'category',
        'ordering': ['-created_at'],
        'strict': True,
        'id_field': '_id'
    }

    _id = db.IntField(primary_key=True, required=True)
    mark = db.StringField(max_length=20)
    name = db.StringField(max_length=30, required=True, unique=True)
    user_id = db.IntField(required=True)
    kind = db.IntField(default=1)  # 类型:1.文档;2.素材;3.--
    pid = db.IntField(default=0)
    cid = db.IntField(default=0)
    sort = db.IntField(default=0)  # 排序
    status = db.IntField(default=0)
    deleted = db.IntField(default=0)
    remark = db.StringField()

    created_at = db.DateTimeField()
    updated_at = db.DateTimeField(default=datetime.datetime.now)

    def mark_delete(self):
        return super(Category, self).update(deleted=1)

    def __unicode__(self):
        return self.name

    @classmethod
    def category_kind_options(self, kind=0):
        data = [{
            'id': 1,
            'name': '文档'
        }, {
            'id': 2,
            'name': '素材'
        }, {
            'id': 3,
            'name': '未定义2'
        }]

        if kind == 0:
            return data
        else:
            for d in data:
                if d['id'] == kind:
                    return d
        return {'id': 0, 'name': ''}

    # 获取父级
    @classmethod
    def fetch_parent_options(self, kind=0):
        query = {}
        if kind != 0:
            query['kind'] = int(kind)
        query['pid'] = 0
        data = Category.objects(
            **query).order_by('-created_at').order_by('-sort').limit(50)

        # 过滤数据
        for i, d in enumerate(data):
            kind_label = '--'
            if d.kind == 1:
                kind_label = '文档'
            if d.kind == 2:
                kind_label = '备用'

            data[i].kind_label = kind_label
        return data

    def list(self, kind=0, **kwargs):
        query = {}
        if kind != 0:
            query['kind'] = int(kind)
        catetories = Category.objects(**query)
        return catetories
Exemple #26
0
class Brand(Base):

    meta = {
        'increase_key': True,
        'collection': 'brand',
        'ordering': ['-created_at'],
        'strict': True,
        'id_field': '_id'
    }

    _id = db.IntField(primary_key=True, required=True)
    name = db.StringField(min_value=2,
                          max_value=30,
                          required=True,
                          unique=True)  # 品牌名称
    description = db.StringField()
    user_id = db.IntField(default=0)
    kind = db.IntField(default=1)  # 类型:1.--;2.--;3.--
    cover_id = db.StringField()  # 封面ID
    status = db.IntField(default=1)
    deleted = db.IntField(default=0)
    remark = db.StringField()

    created_at = db.DateTimeField()
    updated_at = db.DateTimeField(default=datetime.datetime.now)

    # 封面
    def cover(self):
        if self.cover_id and len(self.cover_id) == 12:
            asset = Asset.objects(_id=ObjectId(self.cover_id)).first()
            if asset and asset.deleted == 0:
                return asset

        asset = Asset.objects(target_id=str(self._id), asset_type=5,
                              deleted=0).first()
        if asset and asset.deleted == 0:
            return asset
        return None

    # 标记删除
    def mark_delete(self):
        ok = super(Brand, self).update(deleted=1)
        if ok:
            # 删除附件
            assets = Asset.objects(target_id=str(self._id),
                                   asset_type=5,
                                   deleted=0)
            for item in assets:
                item.mark_delete()

    # 标记恢复
    def mark_recovery(self):
        ok = super(Brand, self).update(deleted=0)
        if ok:
            # 恢复附件
            assets = Asset.objects(target_id=str(self._id),
                                   asset_type=5,
                                   deleted=1)
            for item in assets:
                item.update(deleted=0)

    def __unicode__(self):
        return self.name
Exemple #27
0
class WorkshopParticipantModel(db.EmbeddedDocument):

    user = db.ReferenceField(UserModel, db_field="userId")
    status = db.StringField(max_length=32)