59 lines
1.2 KiB
Plaintext
59 lines
1.2 KiB
Plaintext
module default {
|
|
scalar type access_status extending enum<ok, denied, expired, error>;
|
|
|
|
type IPAddr {
|
|
required value: str {
|
|
constraint exclusive;
|
|
}
|
|
}
|
|
|
|
type UserAgent {
|
|
required value: str {
|
|
constraint exclusive;
|
|
}
|
|
}
|
|
|
|
type files {
|
|
required file_id: str;
|
|
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();
|
|
}
|
|
}
|
|
}
|