using future simple_scoping; module default { scalar type access_status extending enum; type IPAddr { required value: str { constraint exclusive; } } type UserAgent { required value: str { constraint exclusive; } } type files { required file_id: str { constraint exclusive; }; required file_name: str; required file_size: str; required note: str; required content_type: str { readonly := true; } property expires_at: datetime; required uploaded_at: datetime { readonly := true; } multi accesses -> file_access { on source delete delete target if orphan; }; required property user_id: str { readonly := true; }; index on ((.file_id, .file_name, .expires_at, .user_id)); } type file_access { required link ip -> IPAddr { readonly := true; on source delete delete target if orphan; } required link user_agent -> UserAgent { readonly := true; on source delete delete target if orphan; } required status: access_status { default := access_status.ok; } required at: datetime { readonly := true; default := datetime_of_statement(); } } }