diff --git a/source/api/actions/events.ts b/source/api/actions/events.ts index ee69555..e85f2c8 100644 --- a/source/api/actions/events.ts +++ b/source/api/actions/events.ts @@ -111,8 +111,8 @@ namespace _zeitbild.api const session : {key : string; value : lib_plankton.session.type_session;} = await session_from_stuff(stuff); const user_id : _zeitbild.type_user_id = await _zeitbild.service.user.identify(session.value.name); - const from : _zeitbild.helpers.type_pit = parseInt(stuff.query_parameters["from"]); - const to : _zeitbild.helpers.type_pit = parseInt(stuff.query_parameters["to"]); + const from : lib_plankton.pit.type_pit = parseInt(stuff.query_parameters["from"]); + const to : lib_plankton.pit.type_pit = parseInt(stuff.query_parameters["to"]); const calendar_ids_wanted : (null | Array<_zeitbild.type_calendar_id>) = ( ( ("calendar_ids" in stuff.query_parameters) diff --git a/source/helpers.ts b/source/helpers.ts index f6965d6..d5b929d 100644 --- a/source/helpers.ts +++ b/source/helpers.ts @@ -4,478 +4,12 @@ namespace _zeitbild.helpers { - /** - */ - export function date_object_get_week_of_year( - date : Date - ) : int - { - let date_ : Date = new Date(date.getTime()); - date_.setHours(0, 0, 0, 0); - // Thursday in current week decides the year. - date_.setDate(date_.getDate() + 3 - (date_.getDay() + 6) % 7); - // January 4 is always in week 1. - let week1 : Date = new Date(date_.getFullYear(), 0, 4); - // Adjust to Thursday in week 1 and count number of weeks from date to week1. - return ( - 1 - + - Math.round( - ( - ((date_.getTime() - week1.getTime()) / 86400000) - - - 3 - + - (week1.getDay() + 6) % 7 - ) - / - 7 - ) - ); - } - - - /** - * @todo unite with type_datetimeobject? - */ - export type type_datetime = { - timezone_shift : int; - date : type_date; - time : ( - null - | - type_time - ); - }; - - - /** - * @todo timezone_shift - */ - function datetime_from_date_object( - date : Date, - options : { - timezone_shift ?: int; - } = {} - ) : type_datetime - { - options = Object.assign( - { - "timezone_shift": 0, - }, - options - ); - const date_ : Date = lib_plankton.call.convey( - date, - [ - (x : Date) => x.getTime(), - (x : int) => (x + (((options.timezone_shift as int) * (60 * 60)) * 1000)), - (x : int) => new Date(x), - ] - ); - const iso_string : string = date_.toISOString(); - return { - "timezone_shift": (options.timezone_shift as int), - "date": { - "year": parseInt(iso_string.slice(0, 4)), - "month": parseInt(iso_string.slice(5, 7)), - "day": parseInt(iso_string.slice(8, 10)), - }, - "time": { - "hour": parseInt(iso_string.slice(11, 13)), - "minute": parseInt(iso_string.slice(14, 16)), - "second": parseInt(iso_string.slice(17, 19)), - }, - }; - } - - - /** - * @todo negative shift? - */ - function datetime_to_date_object( - datetime : type_datetime - ) : Date - { - const iso_string : string = lib_plankton.string.coin( - "{{year}}-{{month}}-{{day}}T{{hour}}:{{minute}}:{{second}}.000+{{shift}}", - { - "year": datetime.date.year.toFixed(0).padStart(4, "0"), - "month": datetime.date.month.toFixed(0).padStart(2, "0"), - "day": datetime.date.day.toFixed(0).padStart(2, "0"), - "hour": ((datetime.time !== null) ? datetime.time.hour : 0).toFixed(0).padStart(2, "0"), - "minute": ((datetime.time !== null) ? datetime.time.minute : 0).toFixed(0).padStart(2, "0"), - "second": ((datetime.time !== null) ? datetime.time.second : 0).toFixed(0).padStart(2, "0"), - "shift": (datetime.timezone_shift.toFixed(0).padStart(2, "0") + ":00"), - } - ); - return (new Date(iso_string)); - } - - - /** - */ - export type type_pit = int; - - - /** - */ - export function pit_to_date_object( - pit : type_pit - ) : Date - { - return (new Date(pit * 1000)); - } - - - /** - */ - function pit_from_date_object( - date_object : Date - ) : type_pit - { - return Math.round(date_object.getTime() / 1000); - } - - - /** - */ - export function pit_now( - ) : type_pit - { - return pit_from_date_object(new Date(Date.now())); - } - - - /** - * @todo timezone - */ - export function pit_to_datetime( - pit : type_pit, - options : { - timezone_shift ?: int - } = {} - ) : type_datetime - { - options = Object.assign( - { - "timezone_shift": 0, - }, - options - ); - const date_object : Date = pit_to_date_object(pit); - return datetime_from_date_object( - date_object, - { - "timezone_shift": (options.timezone_shift as int), - } - ); - } - - - /** - */ - export function pit_from_datetime( - datetime : type_datetime - ) : type_pit - { - return lib_plankton.call.convey( - datetime, - [ - datetime_to_date_object, - pit_from_date_object, - ] - ); - } - - - /** - */ - export function pit_is_before( - pit : type_pit, - reference : type_pit - ) : boolean - { - return (pit < reference); - } - - - /** - */ - function pit_is_after( - pit : type_pit, - reference : type_pit - ) : boolean - { - return (pit > reference); - } - - - /** - */ - export function pit_is_between( - pit : type_pit, - reference_left : type_pit, - reference_right : type_pit - ) : boolean - { - return ( - pit_is_after(pit, reference_left) - && - pit_is_before(pit, reference_right) - ); - } - - - /** - */ - function pit_shift_hour( - pit : type_pit, - increment : int - ) : type_pit - { - return (pit + (60 * 60 * increment)); - } - - - /** - */ - export function pit_shift_day( - pit : type_pit, - increment : int - ) : type_pit - { - return (pit + (60 * 60 * 24 * increment)); - } - - - /** - */ - export function pit_shift_week( - pit : type_pit, - increment : int - ) : type_pit - { - return (pit + (60 * 60 * 24 * 7 * increment)); - } - - - /** - */ - function pit_shift_year( - pit : type_pit, - increment : int - ) : type_pit - { - return (pit + (60 * 60 * 24 * 365 * increment)); - } - - - /** - */ - function pit_trunc_minute( - pit : type_pit - ) : type_pit - { - const datetime_input : type_datetime = pit_to_datetime(pit); - const datetime_output : type_datetime = { - "timezone_shift": 0, - "date": { - "year": datetime_input.date.year, - "month": datetime_input.date.month, - "day": datetime_input.date.day, - }, - "time": { - "hour": ( - (datetime_input.time === null) - ? - 0 - : - datetime_input.time.hour - ), - "minute": ( - (datetime_input.time === null) - ? - 0 - : - datetime_input.time.minute - ), - "second": 0, - }, - }; - return pit_from_datetime(datetime_output); - } - - - /** - */ - function pit_trunc_hour( - pit : type_pit - ) : type_pit - { - const datetime_input : type_datetime = pit_to_datetime(pit); - const datetime_output : type_datetime = { - "timezone_shift": 0, - "date": { - "year": datetime_input.date.year, - "month": datetime_input.date.month, - "day": datetime_input.date.day, - }, - "time": { - "hour": ( - (datetime_input.time === null) - ? - 0 - : - datetime_input.time.hour - ), - "minute": 0, - "second": 0, - }, - }; - return pit_from_datetime(datetime_output); - } - - - /** - */ - function pit_trunc_day( - pit : type_pit - ) : type_pit - { - const datetime_input : type_datetime = pit_to_datetime(pit); - const datetime_output : type_datetime = { - "timezone_shift": 0, - "date": { - "year": datetime_input.date.year, - "month": datetime_input.date.month, - "day": datetime_input.date.day, - }, - "time": { - "hour": 0, - "minute": 0, - "second": 0, - }, - }; - return pit_from_datetime(datetime_output); - } - - - /** - */ - export function pit_trunc_week( - pit : type_pit - ) : type_pit - { - const date_object : Date = pit_to_date_object(pit); - return lib_plankton.call.convey( - date_object.getDay(), - [ - (x : int) => ((x === 0) ? 7 : x), - (x : int) => (x - 1), - (x : int) => pit_shift_day(pit, (-x)), - pit_trunc_day - ] - ); - } - - - /** - */ - function pit_trunc_month( - pit : type_pit - ) : type_pit - { - const datetime_input : type_datetime = pit_to_datetime(pit); - const datetime_output : type_datetime = { - "timezone_shift": 0, - "date": { - "year": datetime_input.date.year, - "month": datetime_input.date.month, - "day": 1, - }, - "time": { - "hour": 0, - "minute": 0, - "second": 0, - }, - }; - return pit_from_datetime(datetime_output); - } - - - /** - */ - function pit_trunc_year( - pit : type_pit - ) : type_pit - { - const datetime_input : type_datetime = pit_to_datetime(pit); - const datetime_output : type_datetime = { - "timezone_shift": 0, - "date": { - "year": datetime_input.date.year, - "month": 1, - "day": 1, - }, - "time": { - "hour": 0, - "minute": 0, - "second": 0, - }, - }; - return pit_from_datetime(datetime_output); - } - - - /** - * @param year year according to specified timezone shift - * @param week week according to specified timezone shift - * @return the begin of the week (monday, 00:00) - */ - export function pit_from_year_and_week( - year : int, - week : int, - options : { - timezone_shift ?: int; - } = {} - ) : type_pit - { - options = Object.assign( - { - "timezone_shift": 0, - }, - options - ); - return lib_plankton.call.convey( - { - "timezone_shift": (options.timezone_shift as int), - "date": { - "year": year, - "month": 1, - "day": 1, - }, - "time": { - "hour": 0, - "minute": 0, - "second": 0 - } - }, - [ - pit_from_datetime, - (x : type_pit) => pit_shift_week(x, (week - 1)), - pit_trunc_week, - ] - ); - } - - /** * @todo timezone */ function ical_datetime_to_own_datetime( ical_datetime : lib_plankton.ical.type_datetime - ) : type_datetime + ) : lib_plankton.pit.type_datetime { return { "timezone_shift": 0, @@ -504,7 +38,7 @@ namespace _zeitbild.helpers */ export function ical_dt_to_own_datetime( ical_dt: lib_plankton.ical.type_dt - ) : type_datetime + ) : lib_plankton.pit.type_datetime { return { "timezone_shift": 0, diff --git a/source/repositories/resource.ts b/source/repositories/resource.ts index 5b0e788..8b4a45b 100644 --- a/source/repositories/resource.ts +++ b/source/repositories/resource.ts @@ -184,7 +184,7 @@ namespace _zeitbild.repository.resource stuff : type_local_resource_event_stuff ) : Record { - const encode_datetime : ((datetime : _zeitbild.helpers.type_datetime) => string) = ((datetime) => { + const encode_datetime : ((datetime : lib_plankton.pit.type_datetime) => string) = ((datetime) => { return lib_plankton.string.coin( "{{timezone_shift}}|{{date}}{{macro_time}}", { @@ -237,7 +237,7 @@ namespace _zeitbild.repository.resource row : Record ) : type_local_resource_event_stuff { - const decode_datetime : ((datetime_raw : string) => _zeitbild.helpers.type_datetime) = ((datetime_raw) => { + const decode_datetime : ((datetime_raw : string) => lib_plankton.pit.type_datetime) = ((datetime_raw) => { const parts : Array = datetime_raw.split("|"); const timezone_shift : int = parseInt(parts[0]); if (parts[1].length <= 10) { diff --git a/source/services/calendar.ts b/source/services/calendar.ts index 4baf27e..a8c49c2 100644 --- a/source/services/calendar.ts +++ b/source/services/calendar.ts @@ -165,8 +165,8 @@ namespace _zeitbild.service.calendar */ async function get_events( calendar_id : _zeitbild.type_calendar_id, - from_pit : _zeitbild.helpers.type_pit, - to_pit : _zeitbild.helpers.type_pit, + from_pit : lib_plankton.pit.type_pit, + to_pit : lib_plankton.pit.type_pit, user_id : _zeitbild.type_user_id ) : Promise< Array< @@ -197,8 +197,8 @@ namespace _zeitbild.service.calendar (events) => Promise.resolve( events .filter( - (event : _zeitbild.type_event_object) => _zeitbild.helpers.pit_is_between( - _zeitbild.helpers.pit_from_datetime(event.begin), + (event : _zeitbild.type_event_object) => lib_plankton.pit.is_between( + lib_plankton.pit.from_datetime(event.begin), from_pit, to_pit ) @@ -279,8 +279,8 @@ namespace _zeitbild.service.calendar (event) => (event !== null) ) .filter( - (event) => _zeitbild.helpers.pit_is_between( - _zeitbild.helpers.pit_from_datetime(event.begin), + (event) => lib_plankton.pit.is_between( + lib_plankton.pit.from_datetime(event.begin), from_pit, to_pit ) @@ -305,8 +305,8 @@ namespace _zeitbild.service.calendar */ export async function gather_events( calendar_ids_wanted : (null | Array<_zeitbild.type_calendar_id>), - from_pit : _zeitbild.helpers.type_pit, - to_pit : _zeitbild.helpers.type_pit, + from_pit : lib_plankton.pit.type_pit, + to_pit : lib_plankton.pit.type_pit, user_id : _zeitbild.type_user_id ) : Promise< Array< diff --git a/source/types.ts b/source/types.ts index d540af5..920de23 100644 --- a/source/types.ts +++ b/source/types.ts @@ -35,11 +35,11 @@ namespace _zeitbild */ export type type_event_object = { name : string; - begin : _zeitbild.helpers.type_datetime; + begin : lib_plankton.pit.type_datetime; end : ( null | - _zeitbild.helpers.type_datetime + lib_plankton.pit.type_datetime ); location : ( null