Skip to content

Commit

Permalink
feat(scheduler-service): add migration for enums (#40)
Browse files Browse the repository at this point in the history
* feat(scheduler-service): add migration for enums

SFO-98
  • Loading branch information
rashisf authored Jun 30, 2020
1 parent df38e66 commit a512703
Show file tree
Hide file tree
Showing 15 changed files with 244 additions and 58 deletions.
2 changes: 1 addition & 1 deletion services/scheduler-service/.nycrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"include": ["dist"],
"exclude": ["dist/__tests__/", "dist/component.js"],
"exclude": ["dist/__tests__/"],
"extension": [".js", ".ts"],
"reporter": ["text", "html"],
"exclude-after-remap": false
Expand Down
53 changes: 53 additions & 0 deletions services/scheduler-service/migrations/20200630114107-add-enums.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
'use strict';

let dbm;
let type;
let seed;
const fs = require('fs');
const path = require('path');
let Promise;

/**
* We receive the dbmigrate dependency from dbmigrate initially.
* This enables us to not have to rely on NODE_PATH.
*/
exports.setup = function(options, seedLink) {
dbm = options.dbmigrate;
type = dbm.dataType;
seed = seedLink;
Promise = options.Promise;
};

exports.up = function(db) {
const filePath = path.join(__dirname, 'sqls', '20200630114107-add-enums-up.sql');
return new Promise( function( resolve, reject ) {
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
if (err) return reject(err);
console.log('received data: ' + data);

resolve(data);
});
})
.then(function(data) {
return db.runSql(data);
});
};

exports.down = function(db) {
const filePath = path.join(__dirname, 'sqls', '20200630114107-add-enums-down.sql');
return new Promise( function( resolve, reject ) {
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
if (err) return reject(err);
console.log('received data: ' + data);

resolve(data);
});
})
.then(function(data) {
return db.runSql(data);
});
};

exports._meta = {
"version": 1
};
150 changes: 115 additions & 35 deletions services/scheduler-service/migrations/scheduler.dbs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
</table>
</schema>
<schema name="public" >
<udt name="accessroletype" udt_java_type="12" udt_precision="NONE" >
<udt_script><![CDATA[CREATE TYPE ${schema}.${name} AS ENUM ( freeBusyReader, reader, writer, owner )]]></udt_script>
</udt>
<table name="migrations" >
<column name="id" type="integer" length="10" decimal="0" jt="4" mandatory="y" >
<type_extra>GENERATED BY DEFAULT AS IDENTITY</type_extra>
Expand All @@ -51,6 +54,18 @@
<function name="uuid_ns_x500" id="Function_8ca" isSystem="false" params_known="n" />
</schema>
<schema name="scheduler" >
<udt name="accessroletype" udt_java_type="12" udt_precision="NONE" >
<udt_script><![CDATA[CREATE TYPE ${schema}.${name} AS ENUM ( freeBusyReader, reader, writer, owner )]]></udt_script>
</udt>
<udt name="eventstatus" udt_java_type="12" udt_precision="NONE" >
<udt_script><![CDATA[CREATE TYPE ${schema}.${name} AS ENUM ( confirmed, tentative, cancelled )]]></udt_script>
</udt>
<udt name="responsestatus" udt_java_type="12" udt_precision="NONE" >
<udt_script><![CDATA[CREATE TYPE ${schema}.${name} AS ENUM ( needsAction, declined, tentative, accepted )]]></udt_script>
</udt>
<udt name="setting_owner_type" udt_java_type="12" udt_precision="NONE" >
<udt_script><![CDATA[CREATE TYPE ${schema}.${name} AS ENUM ( global, user, calendar, event )]]></udt_script>
</udt>
<table name="attachments" >
<column name="id" type="uuid" decimal="0" jt="1111" mandatory="y" >
<defo>uuid_generate_v1()</defo>
Expand Down Expand Up @@ -119,8 +134,8 @@
<column name="modified_on" type="timestamptz" length="35" decimal="6" jt="93" mandatory="y" >
<defo>CURRENT_TIMESTAMP</defo>
</column>
<column name="response_status" type="varchar" decimal="0" jt="12" >
<defo>&#039;needsAction&#039;::character varying</defo>
<column name="response_status" type="responsestatus" decimal="0" jt="12" >
<defo>&#039;needsAction&#039;::scheduler.responsestatus</defo>
<comment><![CDATA[The attendee's response status. Possible values are:
"needsAction" - The attendee has not responded to the invitation.
"declined" - The attendee has declined the invitation.
Expand Down Expand Up @@ -231,9 +246,10 @@ Event unique identifier as defined in RFC5545.]]></comment>
</column>
<column name="parent_event_id" type="uuid" decimal="0" jt="1111" />
<column name="start_datetime" type="timestamptz" length="35" decimal="6" jt="93" />
<column name="status" type="varchar" decimal="0" jt="12" >
<column name="status" type="eventstatus" decimal="0" jt="12" >
<defo>&#039;confirmed&#039;::scheduler.eventstatus</defo>
<comment><![CDATA[Status of the event. Optional. Possible values are:
"confirmed" - The event is confirmed. This is the default status.
"confirmed" - The event is confirmed.
"tentative" - The event is tentatively confirmed.
"cancelled" - The event is cancelled (deleted).]]></comment>
</column>
Expand Down Expand Up @@ -274,8 +290,8 @@ Event unique identifier as defined in RFC5545.]]></comment>
<column name="owner_id" type="varchar" length="225" decimal="0" jt="12" mandatory="y" >
<comment><![CDATA[This can be an uuid or email id of user.]]></comment>
</column>
<column name="owner_type" type="varchar" decimal="0" jt="12" >
<defo>&#039;global&#039;::character varying</defo>
<column name="owner_type" type="setting_owner_type" decimal="0" jt="12" >
<defo>&#039;global&#039;::scheduler.setting_owner_type</defo>
<comment><![CDATA[values are 'global', 'user', 'calendar', 'event']]></comment>
</column>
<column name="setting_name" type="varchar" length="225" decimal="0" jt="12" >
Expand All @@ -296,8 +312,8 @@ Another example is foreground color, since different users can have different co
<column name="id" type="uuid" decimal="0" jt="1111" mandatory="y" >
<defo>uuid_generate_v1()</defo>
</column>
<column name="access_role" type="varchar" decimal="0" jt="12" >
<defo>&#039;reader&#039;::character varying</defo>
<column name="access_role" type="accessroletype" decimal="0" jt="12" >
<defo>&#039;reader&#039;::scheduler.accessroletype</defo>
<comment><![CDATA[The effective access role that the user has on the calendar. Possible values are:
"freeBusyReader" - Provides read access to free/busy information.
"reader" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
Expand Down Expand Up @@ -429,7 +445,6 @@ A Subscribe and event collection have color field related to this.]]></comment>
</fk>
</table>
<view name="events_attendees_view" >
<comment><![CDATA[combination of events and attendees]]></comment>
<view_script><![CDATA[CREATE VIEW ${schema}.${name} AS SELECT et.id,
et.bg_color,
et.calendar_id,
Expand Down Expand Up @@ -484,7 +499,7 @@ A Subscribe and event collection have color field related to this.]]></comment>
<column name="identifier" type="varchar" />
<column name="parent_event_id" type="uuid" />
<column name="start_datetime" type="timestamptz" />
<column name="status" type="varchar" />
<column name="status" type="eventstatus" />
<column name="summary" type="text" />
<column name="timezone" type="varchar" />
<column name="ext_id" type="varchar" />
Expand All @@ -495,8 +510,26 @@ A Subscribe and event collection have color field related to this.]]></comment>
<column name="is_optional" type="boolean" />
<column name="is_organizer" type="boolean" />
<column name="messages" type="text" />
<column name="response_status" type="varchar" />
<column name="response_status" type="responsestatus" />
</view>
<trigger name="attachments_audit_trigger" table="attachments" id="Trigger_1815" isSystem="false" >
<string><![CDATA[CREATE TRIGGER attachments_audit_trigger AFTER INSERT OR DELETE OR UPDATE ON scheduler.attachments FOR EACH ROW EXECUTE PROCEDURE logs.audit_trigger('Attachments_logs')]]></string>
</trigger>
<trigger name="attendees_audit_trigger" table="attendees" id="Trigger_83e" isSystem="false" >
<string><![CDATA[CREATE TRIGGER attendees_audit_trigger AFTER INSERT OR DELETE OR UPDATE ON scheduler.attendees FOR EACH ROW EXECUTE PROCEDURE logs.audit_trigger('Attendees_logs')]]></string>
</trigger>
<trigger name="calenders_audit_trigger" table="calendars" id="Trigger_1980" isSystem="false" >
<string><![CDATA[CREATE TRIGGER calenders_audit_trigger AFTER INSERT OR DELETE OR UPDATE ON scheduler.calendars FOR EACH ROW EXECUTE PROCEDURE logs.audit_trigger('Calendar_logs')]]></string>
</trigger>
<trigger name="events_audit_trigger" table="events" id="Trigger_252" isSystem="false" >
<string><![CDATA[CREATE TRIGGER events_audit_trigger AFTER INSERT OR DELETE OR UPDATE ON scheduler.events FOR EACH ROW EXECUTE PROCEDURE logs.audit_trigger('Events_logs')]]></string>
</trigger>
<trigger name="subscription_audit_trigger" table="subscriptions" id="Trigger_1e6d" isSystem="false" >
<string><![CDATA[CREATE TRIGGER subscription_audit_trigger AFTER INSERT OR DELETE OR UPDATE ON scheduler.subscriptions FOR EACH ROW EXECUTE PROCEDURE logs.audit_trigger('Subscription_logs')]]></string>
</trigger>
<trigger name="working_hours_audit_trigger" table="working_hours" id="Trigger_2360" isSystem="false" >
<string><![CDATA[CREATE TRIGGER working_hours_audit_trigger AFTER INSERT OR DELETE OR UPDATE ON scheduler.working_hours FOR EACH ROW EXECUTE PROCEDURE logs.audit_trigger('Working_hours_logs')]]></string>
</trigger>
</schema>
<schema name="information_schema" catalogname="sf_schedular" >
<udt name="cardinal_number" udt_java_type="12" udt_precision="NONE" >
Expand Down Expand Up @@ -1156,29 +1189,27 @@ AS $function$areasel$function$
</procedure>
</schema>
<connector name="PostgreSQL" database="PostgreSQL" driver_class="org.postgresql.Driver" driver_jar="postgresql-42.2.14.jar" driver_desc="Standard" host="localhost" port="5432" instance="scheduler" user="postgres" passwd="cG9zdGdyZXM=" />
<layout name="Default Layout" id="Layout_4860003" show_relation="columns" >
<layout name="Default Layout" id="Layout_4860003" joined_routing="y" show_column_type="y" show_relation="columns" >
<comment><![CDATA[Scheduler]]></comment>
<entity schema="scheduler" name="attachments" color="008000" x="320" y="256" />
<entity schema="scheduler" name="attendees" color="008000" x="320" y="800" />
<entity schema="logs" name="audit_logs" color="3986C1" x="608" y="1504" >
<callout x="656" y="1456" pointer="SV" />
<entity schema="scheduler" name="attachments" color="008000" x="400" y="256" />
<entity schema="scheduler" name="attendees" color="008000" x="400" y="800" />
<entity schema="logs" name="audit_logs" color="3986C1" x="704" y="1312" >
<callout x="752" y="1264" pointer="SV" />
</entity>
<entity schema="scheduler" name="calendars" color="3986C1" x="608" y="256" >
<callout x="656" y="176" pointer="SV" />
<entity schema="scheduler" name="calendars" color="3986C1" x="784" y="256" >
<callout x="832" y="176" pointer="SV" />
</entity>
<entity schema="scheduler" name="events" color="008000" x="64" y="256" />
<entity schema="scheduler" name="events_attendees_view" color="008000" x="48" y="800" >
<callout x="64" y="1360" pointer="NV" />
<entity schema="scheduler" name="events" color="008000" x="80" y="256" />
<entity schema="scheduler" name="events_attendees_view" color="008000" x="48" y="800" />
<entity schema="scheduler" name="settings" color="3986C1" x="720" y="1008" />
<entity schema="scheduler" name="subscriptions" color="3986C1" x="1136" y="256" >
<callout x="528" y="80" pointer="SE" />
</entity>
<entity schema="scheduler" name="settings" color="3986C1" x="608" y="1120" />
<entity schema="scheduler" name="subscriptions" color="3986C1" x="896" y="256" >
<callout x="288" y="80" pointer="SE" />
<entity schema="scheduler" name="themes" color="3986C1" x="1072" y="1008" >
<callout x="720" y="928" pointer="SE" />
</entity>
<entity schema="scheduler" name="themes" color="3986C1" x="848" y="1120" >
<callout x="496" y="1040" pointer="SE" />
</entity>
<entity schema="scheduler" name="working_hours" color="3986C1" x="608" y="624" >
<callout x="624" y="880" pointer="NV" />
<entity schema="scheduler" name="working_hours" color="3986C1" x="784" y="624" >
<callout x="800" y="880" pointer="NV" />
</entity>
<group name="configuration" color="C4E0F9" >
<entity schema="scheduler" name="settings" />
Expand All @@ -1199,8 +1230,11 @@ AS $function$areasel$function$
<entity schema="scheduler" name="events_attendees_view" />
</group>
<script name="SQL_Editor" id="Editor_3671622" language="SQL" >
<string><![CDATA[CREATE TYPE accessRoleType AS ENUM ('freeBusyReader','reader', 'writer', 'owner');
ALTER TABLE calendar_list ADD accessRole accessRoleType default 'reader';]]></string>
<string><![CDATA[CREATE TYPE scheduler.accessRoleType AS ENUM ('freeBusyReader','reader', 'writer', 'owner');
ALTER TABLE scheduler.subscriptions ADD access_Role accessRoleType default 'reader';
ALTER TABLE scheduler.subscriptions ALTER COLUMN access_role DROP DEFAULT;
ALTER TABLE scheduler.subscriptions ALTER COLUMN access_role TYPE scheduler.accessRoleType USING access_role::text::scheduler.accessRoleType;
ALTER TABLE scheduler.subscriptions ALTER COLUMN access_role SET DEFAULT 'reader'; ]]></string>
</script>
<script name="SQL_Editor_001" id="Editor_14c49e0" language="SQL" >
<string><![CDATA[ALTER TABLE calendar ADD created_on timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL;
Expand All @@ -1209,8 +1243,10 @@ ALTER TABLE calendar_list ADD created_on timestamptz DEFAULT CURRENT_TIMESTAMP N
ALTER TABLE calendar_list ADD modified_on timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL;]]></string>
</script>
<script name="SQL_Editor_002" id="Editor_1dcc6c6" language="SQL" >
<string><![CDATA[CREATE TYPE responseStatus AS ENUM ('needsAction','declined', 'tentative', 'accepted');
ALTER TABLE attendees ADD responseStatus responseStatus default 'needsAction';]]></string>
<string><![CDATA[CREATE TYPE scheduler.responseStatus AS ENUM ('needsAction','declined', 'tentative', 'accepted');
ALTER TABLE scheduler.attendees ALTER COLUMN response_status DROP DEFAULT;
ALTER TABLE scheduler.attendees ALTER COLUMN response_status TYPE scheduler.responseStatus USING response_status::text::scheduler.responseStatus;
ALTER TABLE scheduler.attendees ALTER COLUMN response_status SET DEFAULT 'needsAction'; ]]></string>
</script>
<script name="SQL_Editor_003" id="Editor_366f08c" language="SQL" >
<string><![CDATA[CREATE TYPE eventStatus AS ENUM ('confirmed','tentative', 'cancelled');
Expand Down Expand Up @@ -1510,8 +1546,10 @@ ALTER TABLE "public".event_attendee ADD CONSTRAINT fk_event_attendees_event FORE
ALTER TABLE "public".working_hour ADD CONSTRAINT fk_working_hour_calendar FOREIGN KEY ( calendar_id ) REFERENCES "public".calendar( id );]]></string>
</script>
<script name="SQL_Editor_006" id="Editor_5da2f64" language="SQL" >
<string><![CDATA[CREATE TYPE setting_owner_type AS ENUM ('global', 'user', 'calendar', 'event');
ALTER TABLE settings ADD owner_type setting_owner_type default 'global';]]></string>
<string><![CDATA[CREATE TYPE scheduler.setting_owner_type AS ENUM ('global', 'user', 'calendar', 'event');
ALTER TABLE scheduler.settings ALTER COLUMN owner_type DROP DEFAULT;
ALTER TABLE scheduler.settings ALTER COLUMN owner_type TYPE scheduler.setting_owner_type USING owner_type::text::scheduler.setting_owner_type;
ALTER TABLE scheduler.settings ALTER COLUMN owner_type SET DEFAULT 'global';]]></string>
</script>
<script name="SQL_Editor_007" id="Editor_5bab850" language="SQL" >
<string><![CDATA[CREATE TABLE "public".settings (
Expand Down Expand Up @@ -1670,6 +1708,12 @@ END IF;
END;
$function$
;]]></string>
</script>
<script name="SQL_Editor_010" id="Editor_436" language="SQL" >
<string><![CDATA[CREATE TYPE scheduler.eventStatus AS ENUM ('confirmed','tentative', 'cancelled');
ALTER TABLE scheduler.events ALTER COLUMN status DROP DEFAULT;
ALTER TABLE scheduler.events ALTER COLUMN status TYPE scheduler.eventStatus USING status::text::scheduler.eventStatus;
ALTER TABLE scheduler.events ALTER COLUMN status SET DEFAULT 'confirmed';]]></string>
</script>
<script name="audit_logs" id="Editor_40627fc" language="SQL" >
<string><![CDATA[CREATE TABLE logs.audit_logs (
Expand All @@ -1692,5 +1736,41 @@ COMMENT ON TABLE logs.audit_logs IS 'DB trigger based audit_logs';
COMMENT ON COLUMN logs.audit_logs.action_by IS 'Person/User Email ID.';
]]></string>
</script>
<script name="events_attendees_view" id="Editor_55" language="SQL" >
<string><![CDATA[CREATE VIEW scheduler.events_attendees_view AS SELECT et.id,
et.bg_color,
et.calendar_id,
et.created_by,
et.created_on,
et.deleted,
et.description,
et.end_datetime,
et.fg_color,
et.icaluid,
et.is_full_day_event,
et.is_locked,
et.link,
et.location,
et.meeting_link,
et.modified_by,
et.modified_on,
et.identifier,
et.parent_event_id,
et.start_datetime,
et.status,
et.summary,
et.timezone,
et.ext_id,
et.ext_metadata,
at.id AS attendee_id,
at.identifier AS attendee_identifier,
at.event_id,
at.is_optional,
at.is_organizer,
at.messages,
at.response_status
FROM (scheduler.events et
LEFT JOIN scheduler.attendees at ON ((et.id = at.event_id)));]]></string>
</script>
</layout>
</project>
Binary file modified services/scheduler-service/migrations/scheduler_db_schema.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/* Replace with your SQL commands */

DROP VIEW scheduler.events_attendees_view;

ALTER TABLE scheduler.subscriptions ALTER COLUMN access_role TYPE varchar;

ALTER TABLE scheduler.attendees ALTER COLUMN response_status TYPE varchar;

ALTER TABLE scheduler.settings ALTER COLUMN owner_type TYPE varchar;

ALTER TABLE scheduler.events ALTER COLUMN status TYPE varchar;

CREATE OR REPLACE VIEW scheduler.events_attendees_view AS
SELECT et.*,
at.id AS attendee_id,
at.identifier AS attendee_identifier,
at.event_id,
at.is_optional,
at.is_organizer,
at.messages,
at.response_status
FROM scheduler.events et
LEFT JOIN scheduler.attendees at ON et.id = at.event_id;
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
DROP VIEW scheduler.events_attendees_view;

CREATE TYPE scheduler.accessRoleType AS ENUM
('freeBusyReader','reader', 'writer', 'owner');
ALTER TABLE scheduler.subscriptions ALTER COLUMN access_role DROP DEFAULT;
ALTER TABLE scheduler.subscriptions ALTER COLUMN access_role TYPE
scheduler.accessRoleType USING access_role::text::scheduler.accessRoleType;
ALTER TABLE scheduler.subscriptions ALTER COLUMN access_role
SET
DEFAULT 'reader';

CREATE TYPE scheduler.responseStatus AS ENUM
('needsAction','declined', 'tentative', 'accepted');
ALTER TABLE scheduler.attendees ALTER COLUMN response_status DROP DEFAULT;
ALTER TABLE scheduler.attendees ALTER COLUMN response_status TYPE
scheduler.responseStatus USING response_status::text::scheduler.responseStatus;
ALTER TABLE scheduler.attendees ALTER COLUMN response_status
SET
DEFAULT 'needsAction';

CREATE TYPE scheduler.setting_owner_type AS ENUM
('global', 'user', 'calendar', 'event');
ALTER TABLE scheduler.settings ALTER COLUMN owner_type DROP DEFAULT;
ALTER TABLE scheduler.settings ALTER COLUMN owner_type TYPE
scheduler.setting_owner_type USING owner_type::text::scheduler.setting_owner_type;
ALTER TABLE scheduler.settings ALTER COLUMN owner_type
SET
DEFAULT 'global';

CREATE TYPE scheduler.eventStatus AS ENUM
('confirmed', 'tentative', 'cancelled', 'completed');
ALTER TABLE scheduler.events ALTER COLUMN status DROP DEFAULT;
ALTER TABLE scheduler.events ALTER COLUMN status TYPE
scheduler.eventStatus USING status::text::scheduler.eventStatus;
ALTER TABLE scheduler.events ALTER COLUMN status
SET
DEFAULT 'tentative';

CREATE VIEW scheduler.events_attendees_view
AS
SELECT et.*,
at.id AS attendee_id,
at.identifier AS attendee_identifier,
at.event_id,
at.is_optional,
at.is_organizer,
at.messages,
at.response_status
FROM (scheduler.events et
LEFT JOIN scheduler.attendees at ON ((et.id = at.event_id)));
Loading

0 comments on commit a512703

Please sign in to comment.