namespace _zeitbild.repository.local_resource_event { /** */ var _store : ( null | lib_plankton.storage.type_store< int, Record, {}, lib_plankton.storage.type_sql_table_autokey_search_term, Record > ) = null; /** */ function get_store( ) : lib_plankton.storage.type_store< int, Record, {}, lib_plankton.storage.type_sql_table_autokey_search_term, Record > { if (_store === null) { _store = lib_plankton.storage.sql_table_autokey_store( { "database_implementation": _zeitbild.database.get_implementation(), "table_name": "events", "key_name": "id", } ); } else { // do nothing } return _store; } /** */ function encode( event : _zeitbild.type_event_object ) : Record { const encode_datetime : ((datetime : _zeitbild.helpers.type_datetime) => string) = ((datetime) => { return lib_plankton.string.coin( "{{timezone_shift}}|{{date}}{{macro_time}}", { "timezone_shift": datetime.timezone_shift.toFixed(0).padStart(2, "0"), "date": lib_plankton.string.coin( "{{year}}-{{month}}-{{day}}", { "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"), } ), "macro_time": ( (datetime.time === null) ? "" : lib_plankton.string.coin( "T{{hour}}:{{minute}}:{{second}}", { "hour": datetime.time.hour.toFixed(0).padStart(2, "0"), "minute": datetime.time.minute.toFixed(0).padStart(2, "0"), "second": datetime.time.second.toFixed(0).padStart(2, "0"), } ) ), } ); }); return { "name": event.name, "begin": encode_datetime(event.begin), "end": ( (event.end === null) ? null : encode_datetime(event.end) ), "location": event.location, "description": event.description, } } /** */ function decode( row : Record ) : _zeitbild.type_event_object { const decode_datetime : ((datetime_raw : string) => _zeitbild.helpers.type_datetime) = ((datetime_raw) => { const parts : Array = datetime_raw.split("|"); const timezone_shift : int = parseInt(parts[0]); if (parts[1].length <= 10) { return { "timezone_shift": timezone_shift, "date": { "year": parseInt(parts[1].slice(0, 4)), "month": parseInt(parts[1].slice(5, 7)), "day": parseInt(parts[1].slice(8, 10)), }, "time": null }; } else { return { "timezone_shift": timezone_shift, "date": { "year": parseInt(parts[1].slice(0, 4)), "month": parseInt(parts[1].slice(5, 7)), "day": parseInt(parts[1].slice(8, 10)), }, "time": { "hour": parseInt(parts[1].slice(11, 13)), "minute": parseInt(parts[1].slice(14, 16)), "second": parseInt(parts[1].slice(17, 19)), } }; } }); return { "name": row["name"], "begin": decode_datetime(row["begin"]), "end": ( (row["end"] === null) ? null : decode_datetime(row["end"]) ), "location": row["location"], "description": row["description"], }; } /** */ export function read( event_id : _zeitbild.type_event_id ) : Promise<_zeitbild.type_event_object> { return ( get_store().read(event_id) .then( row => Promise.resolve<_zeitbild.type_event_object>(decode(row)) ) ); } /** */ export function create( event_object : _zeitbild.type_event_object ) : Promise<_zeitbild.type_event_id> { return ( Promise.resolve(encode(event_object)) .then( (row) => get_store().create(row) ) ); } }