Skip to content

Commit b777cc0

Browse files
[EdgeDB] PeriodicReport schema (#3073)
Co-authored-by: Carson Full <[email protected]>
1 parent 17d1892 commit b777cc0

File tree

4 files changed

+80
-0
lines changed

4 files changed

+80
-0
lines changed

dbschema/common.esdl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,18 @@ module default {
2323
# This will be reflected to dynamically inject portable shapes in our EdgeQL queries.
2424
function hydrate(typeName: str, scopedValue: json) -> str
2525
using (typeName);
26+
27+
# Get the inclusive upper bound of the given date range.
28+
function date_range_get_upper(period: range<cal::local_date>) -> cal::local_date
29+
using ((
30+
with
31+
e := assert_exists(range_get_upper(period))
32+
# https://github.com/edgedb/edgedb/issues/6786
33+
# e - <cal::date_duration>"1 day"
34+
select cal::to_local_date(
35+
<int64>cal::date_get(e, 'year'),
36+
<int64>cal::date_get(e, 'month'),
37+
<int64>cal::date_get(e, 'day') - 1,
38+
)
39+
));
2640
}

dbschema/migrations/00054.edgeql

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
CREATE MIGRATION m1mbjrsuqwwklgbswbvdbryp4p7gpgevkd7eq2qx6hfelhjvipkyhq
2+
ONTO m1vp4elagp7wzixttjl3s6pk2q5ml2p4zq35vvdc3nouewe3qvcm3q
3+
{
4+
CREATE FUNCTION default::date_range_get_upper(period: range<cal::local_date>) -> cal::local_date USING (WITH
5+
e :=
6+
std::assert_exists(std::range_get_upper(period))
7+
SELECT
8+
cal::to_local_date(<std::int64>cal::date_get(e, 'year'), <std::int64>cal::date_get(e, 'month'), (<std::int64>cal::date_get(e, 'day') - 1))
9+
);
10+
CREATE ABSTRACT TYPE default::PeriodicReport EXTENDING default::Resource, Mixin::Embedded {
11+
CREATE REQUIRED PROPERTY period: range<cal::local_date>;
12+
CREATE PROPERTY `end` := (default::date_range_get_upper(.period));
13+
CREATE LINK reportFile: default::File;
14+
CREATE PROPERTY receivedDate: cal::local_date;
15+
CREATE PROPERTY skippedReason: std::str;
16+
CREATE PROPERTY `start` := (std::range_get_lower(.period));
17+
};
18+
CREATE TYPE default::FinancialReport EXTENDING default::PeriodicReport, Project::Child {
19+
ALTER LINK container {
20+
SET OWNED;
21+
SET TYPE default::Project USING (<default::Project>{});
22+
};
23+
};
24+
CREATE TYPE default::NarrativeReport EXTENDING default::PeriodicReport, Project::Child {
25+
ALTER LINK container {
26+
SET OWNED;
27+
SET TYPE default::Project USING (<default::Project>{});
28+
};
29+
};
30+
CREATE TYPE default::ProgressReport EXTENDING default::PeriodicReport, Engagement::Child {
31+
ALTER LINK container {
32+
SET OWNED;
33+
SET TYPE default::LanguageEngagement USING (<default::LanguageEngagement>{});
34+
};
35+
ALTER LINK engagement {
36+
SET OWNED;
37+
SET TYPE default::LanguageEngagement USING (<default::LanguageEngagement>{});
38+
};
39+
};
40+
};

dbschema/periodic-report.esdl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module default {
2+
abstract type PeriodicReport extending Resource, Mixin::Embedded {
3+
required period: range<cal::local_date>;
4+
`start` := range_get_lower(.period);
5+
`end` := date_range_get_upper(.period);
6+
7+
skippedReason: str;
8+
9+
reportFile: File;
10+
receivedDate: cal::local_date;
11+
}
12+
13+
type FinancialReport extending PeriodicReport, Project::Child {
14+
overloaded container: Project;
15+
}
16+
17+
type NarrativeReport extending PeriodicReport, Project::Child {
18+
overloaded container: Project;
19+
}
20+
}

dbschema/progress-report.esdl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module default {
2+
type ProgressReport extending PeriodicReport, Engagement::Child {
3+
overloaded container: LanguageEngagement;
4+
overloaded engagement: LanguageEngagement;
5+
}
6+
}

0 commit comments

Comments
 (0)