class Member(Document): class Meta: collection_name = "member" # vouch = fields.ListField(fields.IntegerField, default=list) id = fields.IntegerField(attribute="_id") balance = fields.IntegerField(default=0) banker_balance = fields.IntegerField(default=0) joined_at = fields.DateTimeField(default=None) suspended = fields.BooleanField(default=False) invites = fields.IntegerField(default=0) gatcha_counter = fields.DictField(fields.StringField(), fields.IntegerField(), default=dict) # shitty event collected code has_collected = fields.BooleanField(default=False) # even more shitty reputation system vouched_for = fields.ListField(fields.IntegerField()) vouched_by = fields.ListField(fields.IntegerField()) reported_for = fields.ListField(fields.IntegerField()) reported_by = fields.ListField(fields.IntegerField()) pray_count = fields.IntegerField(default=0) pray_winnings = fields.IntegerField(default=0) #event system event_activated = fields.BooleanField(default=False) event_multiplier = fields.FloatField(default=1.0) work_activated = fields.BooleanField(default=False) bonus_bought = fields.BooleanField(default=False) points = fields.FloatField(default=0.0)
class Guild(Document): class Meta: strict = False id = fields.IntegerField(attribute="_id") channel = fields.IntegerField(default=None) channels = fields.ListField(fields.IntegerField, default=list) prefix = fields.StringField(default=None) silence = fields.BooleanField(default=False) display_images = fields.BooleanField(default=True) auction_channel = fields.IntegerField(default=None) lat = fields.FloatField(default=37.7790262) lng = fields.FloatField(default=-122.4199061) loc = fields.StringField( default= "San Francisco, San Francisco City and County, California, United States of America" ) @property def is_day(self): sun = Sun(self.lat, self.lng) sunrise, sunset = sun.get_sunrise_time(), sun.get_sunset_time() if sunset < sunrise: sunset += timedelta(days=1) now = datetime.now(timezone.utc) return (sunrise < now < sunset or sunrise < now + timedelta(days=1) < sunset or sunrise < now + timedelta(days=-1) < sunset)
class Event(EmbeddedDocument): title = fields.StringField(required=True, allow_none=False) description = fields.StringField(allow_none=True, default="") event_type = fields.StringField(required=True, allow_none=False) event_start = fields.StringField(required=True, allow_none=False) event_end = fields.StringField(required=True, allow_none=False) event_length = fields.FloatField(required=True, allow_none=False) probability = fields.FloatField(required=True, allow_none=False) markers = fields.ListField(fields.EmbeddedField(Marker), allow_none=True, default=[])
class Movie(Document): name = fields.StringField(required=True) director = fields.StringField(required=True) categories = fields.ListField(fields.StringField()) imdb_score = fields.FloatField() popularity_99 = fields.FloatField() def __str__(self): return f"{self.name} : {self.director}" def __repr__(self): return f"<{self.name} : {self.director}>"
class Anime(Document): name = fields.DictField(required=True) format = fields.StrField(validate=validate.OneOf( ["ONA", "OVA", "TV", "Movie", "Special", "Music", "TV Short"])) tags = fields.ListField(fields.StrField()) #array genres = fields.ListField(fields.StrField()) #array synopsis = fields.StrField() season = fields.StrField() duration = fields.IntField() release_date = fields.StrField() studios = fields.ListField(fields.StrField()) #array episodes = fields.IntField() source = fields.StrField(validate=validate.OneOf([ "Original", "Manga", "Light Novel", "Visual Novel", "Novel", "Video Game", "Doujinshi" ])) #TODO: controller logic will have to implement String ID to ObjectID from bson.objectid.ObjectId for queries id = fields.StrField() #TODO: client facing JSON response in API controller will have to output characters with proper structure/dictionary #TODO: client facing JSON request in API controller will have to parse through characters and make separate queries for them. #TODO: frontend will use the same API #TODO: same goes with staff, as in their pictures, names, roles rating = fields.FloatField() cover = fields.ReferenceField("Image") class Meta: collection = db.anime
class BaseStudent(Document): name = fields.StrField(required=True) birthday = fields.DateTimeField() gpa = fields.FloatField() class Meta: abstract = True
class Meeting(Document): owner = fields.ReferenceField('User', required=True) members = fields.ListField(fields.ReferenceField('MeetingMember')) meeting_type = fields.StrField(validate=validate.OneOf(MEETING_TYPES), required=True) state = fields.StrField(validate=validate.OneOf(MEETING_STATES)) description = fields.StrField() place_address = fields.StrField() latitude = fields.FloatField() longitude = fields.FloatField() google_place_id = fields.IntField() google_place_city_id = fields.IntField() date_created = fields.DateTimeField(missing=datetime.now()) date_resolved = fields.DateTimeField(required=True)
class ProductDocument(Document): category = fields.ObjectIdField(required=True) name = fields.StringField(required=True) description = fields.StringField(required=True) price = fields.FloatField(required=True) image_url = fields.StringField() available_from = fields.StringField(required=True) available_till = fields.StringField(required=True)
class OrderDocument(Document): products = fields.ListField(fields.ReferenceField(ProductDocument), required=True) cafe = fields.ObjectIdField(required=True) user_id = fields.StringField(required=True, unique=True) order_time = fields.DateTimeField(required=True) code = fields.IntegerField(required=True) price = fields.FloatField(required=True) deletion_time = fields.DateTimeField(allow_none=True)
class MySchema(Schema): string = fields.StringField() uuid = fields.UUIDField() number = fields.NumberField() integer = fields.IntegerField() decimal = fields.DecimalField() boolean = fields.BooleanField() float = fields.FloatField() url = fields.UrlField() email = fields.EmailField() constant = fields.ConstantField("const")
class MySchema(EmbeddedSchema): string = fields.StringField() uuid = fields.UUIDField() number = fields.NumberField() integer = fields.IntegerField() decimal = fields.DecimalField() boolean = fields.BooleanField() formattedstring = fields.FormattedStringField('Hello {to_format}') float = fields.FloatField() # localdatetime = fields.LocalDateTimeField() url = fields.UrlField() email = fields.EmailField() constant = fields.ConstantField("const")
class MyEmbeddedDoc(EmbeddedDocument): _prop = fields.FloatField() @property def prop(self): return self._prop @prop.setter def prop(self, value): self._prop = value @prop.deleter def prop(self): del self._prop
class HeavyStudent(BaseStudent): _weight = fields.FloatField() @property def weight(self): return self._weight @weight.setter def weight(self, value): self._weight = value @weight.deleter def weight(self): del self._weight
class CustomerGoodsDetail(Document): customer = fields.ReferenceField(Customer) # 顾客 stock_name = fields.StringField() # 货物 stock_num = fields.IntField(missing=0) # 数量 stock_price = fields.FloatField(missing=0) # 单价 stock_amount = fields.FloatField(missing=0) # 金额 is_active = fields.BooleanField(missing=True) # 记录有效性 created_time = fields.DateTimeField(missing=datetime.datetime.now) # 记录时间 @classmethod async def new_c_detail(cls, customer_id='', stock_name=''): customer = await Customer.find_one({'id': ObjectId(customer_id)}) stock = await Stock.find_one({'name': stock_name}) detail = await cls.find_one({'customer': ObjectId(customer_id), 'stock_name': stock_name}) if customer and stock: if detail: pass else: c_detail = await cls(customer=customer, stock_name=stock_name, stock_price=stock.price).commit() return {'id': str(c_detail.inserted_id),'stock_name': stock_name, 'stock_num': 0,'stock_price': stock.price, 'stock_amount': 0} return None @classmethod async def get_customer_goods(cls, customer_id=''): return await cls.find({'customer': ObjectId(customer_id)}).to_list(length=None) @classmethod async def update_customer_goods(cls, id='', customer_id='', num=0, price=0): customer_goods = await cls.find_one({'id': ObjectId(id), 'customer': ObjectId(customer_id)}) if customer_goods: customer_goods.stock_num = num customer_goods.stock_price = price customer_goods.stock_amount = num * price await customer_goods.commit()
class MSReadySample(Document): name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=True) clinicalSamples = fields.ListField(fields.ObjectIdField, required=False) intermediateSampleId = fields.ObjectIdField(required=True) msReadySampleName = fields.StrField(required=False) workflowTag = fields.StrField(required=False) quality = fields.StrField(required=False) peptideNo = fields.FloatField(required=False) description = fields.StrField(required=False) concentration = fields.StrField(required=False) processingPerson = fields.StrField(required=False) currentLocation = fields.StrField(required=False) createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "msReadySample"
class GeographicLocation(EmbeddedDocument): latitude = fields.FloatField(required=True, allow_none=False) longitude = fields.FloatField(required=True, allow_none=False)
class Point(EmbeddedDocument, metaclass=MetaBaseTemplate): latitude = fields.FloatField() longitude = fields.FloatField()
class Bubble(EmbeddedDocument): position_x = fields.FloatField() position_y = fields.FloatField() tags = fields.ListField(fields.ReferenceField('Tag'))
class Stock(Document): name = fields.StringField(unique=True, required=True) # 名称 num = fields.IntField(missing=0) # 数量 unit = fields.StringField() # 单位 opening_price = fields.FloatField() # 进价 price = fields.FloatField() # 单价 opening_amount = fields.FloatField() # 进价总额 amount = fields.FloatField() # 总额 remarks = fields.StringField() # 备注 is_active = fields.BooleanField(missing=True) # 记录有效性 created_time = fields.DateTimeField(missing=datetime.datetime.now) # 记录时间 class Meta: collection_name = 'stock' @classmethod async def create_stock(cls, name='', num=0, unit='', opening_price=0, price=0, remarks=''): stock = await cls.find_one({"name": name}) if stock: return {'errcode': 1, 'msg': '已经有了物料,换个名字吧'} await cls(name=name, num=num, unit=unit, opening_price=opening_price, price=price, opening_amount=opening_price * num, amount=price * num, remarks=remarks).commit() return {'errcode': 0, 'msg': '添加成功'} # 获取物料列表 @classmethod async def get_stocks(cls, is_active=None): if is_active == 'true' or is_active == True: return await cls.find({"is_active": True}).sort([('created_time', 1)]).to_list(length=None) return await cls.find({"is_active": False}).sort([('created_time', 1)]).to_list(length=None) @classmethod async def get_stocks_count(cls): return await cls.find({"is_active": True}).count() # 获取物料 @classmethod async def get_stock(cls, id=''): try: return await cls.find_one({'id': ObjectId(id)}) except: return None # 删除物料 @classmethod async def delete_stock(cls, id=''): try: stock = await cls.get_stock(id) stock.is_active = False await stock.commit() return {'errcode': 0, 'msg': '已删除'} except: return {'errcode': 1, 'msg': '没有此物料,请检查物料列表'} # 修改物料 @classmethod async def update_stock(cls, name='', num=0, unit='', opening_price=0, price=0, remarks=''): stock = await cls.find_one({"name": name}) if stock: if stock.num == num and stock.unit == unit and stock.opening_price == opening_price and stock.price == price and stock.remarks == remarks: return {'errcode': 1, 'msg': '您没有任何修改'} stock.num = num stock.unit = unit stock.opening_price = opening_price stock.price = price stock.opening_amount = opening_price * num stock.amount = price * num stock.remarks = remarks await stock.commit() return {'errcode': 0, 'msg': '已修改'} return {'errcode': 1, 'msg': '没有此货物'}
class EmbeddedStudent(EmbeddedDocument): name = fields.StrField(required=True) birthday = fields.DateTimeField() gpa = fields.FloatField()