implmented brand new getAvailability (#1649)
This commit is contained in:
		
							parent
							
								
									b616d36fcc
								
							
						
					
					
						commit
						df0d4654fe
					
				
					 3 changed files with 79 additions and 37 deletions
				
			
		| 
						 | 
				
			
			@ -184,18 +184,54 @@ export default abstract class BaseCalendarService implements Calendar {
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getAvailability(
 | 
			
		||||
  async getAvailability(
 | 
			
		||||
    dateFrom: string,
 | 
			
		||||
    dateTo: string,
 | 
			
		||||
    selectedCalendars: IntegrationCalendar[]
 | 
			
		||||
  ): Promise<EventBusyDate[]> {
 | 
			
		||||
    this.log.warn(
 | 
			
		||||
      `Method not implemented. dateFrom: ${dateFrom}, dateTo: ${dateTo}, selectedCalendars: ${selectedCalendars}`
 | 
			
		||||
    );
 | 
			
		||||
    const objects = (
 | 
			
		||||
      await Promise.all(
 | 
			
		||||
        selectedCalendars.map((sc) =>
 | 
			
		||||
          fetchCalendarObjects({
 | 
			
		||||
            calendar: {
 | 
			
		||||
              url: sc.externalId,
 | 
			
		||||
            },
 | 
			
		||||
            headers: this.headers,
 | 
			
		||||
            expand: true,
 | 
			
		||||
            timeRange: {
 | 
			
		||||
              start: new Date(dateFrom).toISOString(),
 | 
			
		||||
              end: new Date(dateTo).toISOString(),
 | 
			
		||||
            },
 | 
			
		||||
          })
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    ).flat();
 | 
			
		||||
 | 
			
		||||
    const eventsBusyDate: EventBusyDate[] = [];
 | 
			
		||||
    const events = objects
 | 
			
		||||
      .filter((e) => !!e.data)
 | 
			
		||||
      .map((object) => {
 | 
			
		||||
        const jcalData = ICAL.parse(object.data);
 | 
			
		||||
        const vcalendar = new ICAL.Component(jcalData);
 | 
			
		||||
        const vevent = vcalendar.getFirstSubcomponent("vevent");
 | 
			
		||||
        const event = new ICAL.Event(vevent);
 | 
			
		||||
        const calendarTimezone =
 | 
			
		||||
          vcalendar.getFirstSubcomponent("vtimezone")?.getFirstPropertyValue("tzid") || "";
 | 
			
		||||
 | 
			
		||||
    return Promise.resolve(eventsBusyDate);
 | 
			
		||||
        const startDate = calendarTimezone
 | 
			
		||||
          ? dayjs(event.startDate.toJSDate()).tz(calendarTimezone)
 | 
			
		||||
          : new Date(event.startDate.toUnixTime() * 1000);
 | 
			
		||||
 | 
			
		||||
        const endDate = calendarTimezone
 | 
			
		||||
          ? dayjs(event.endDate.toJSDate()).tz(calendarTimezone)
 | 
			
		||||
          : new Date(event.endDate.toUnixTime() * 1000);
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
          start: startDate.toISOString(),
 | 
			
		||||
          end: endDate.toISOString(),
 | 
			
		||||
        };
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    return Promise.resolve(events);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async listCalendars(event?: CalendarEvent): Promise<IntegrationCalendar[]> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,7 +100,7 @@
 | 
			
		|||
    "short-uuid": "^4.2.0",
 | 
			
		||||
    "stripe": "^8.191.0",
 | 
			
		||||
    "superjson": "1.8.0",
 | 
			
		||||
    "tsdav": "^1.1.5",
 | 
			
		||||
    "tsdav": "2.0.0-rc.3",
 | 
			
		||||
    "tslog": "^3.2.1",
 | 
			
		||||
    "uuid": "^8.3.2",
 | 
			
		||||
    "zod": "^3.8.2"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										66
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								yarn.lock
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -4115,12 +4115,12 @@ create-require@^1.1.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
 | 
			
		||||
  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
 | 
			
		||||
 | 
			
		||||
cross-fetch@3.1.4:
 | 
			
		||||
  version "3.1.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39"
 | 
			
		||||
  integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==
 | 
			
		||||
cross-fetch@3.1.5:
 | 
			
		||||
  version "3.1.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
 | 
			
		||||
  integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    node-fetch "2.6.1"
 | 
			
		||||
    node-fetch "2.6.7"
 | 
			
		||||
 | 
			
		||||
cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
 | 
			
		||||
  version "7.0.3"
 | 
			
		||||
| 
						 | 
				
			
			@ -4238,13 +4238,20 @@ debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    ms "2.0.0"
 | 
			
		||||
 | 
			
		||||
debug@4, debug@4.3.2, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@~4.3.1:
 | 
			
		||||
debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@~4.3.1:
 | 
			
		||||
  version "4.3.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
 | 
			
		||||
  integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    ms "2.1.2"
 | 
			
		||||
 | 
			
		||||
debug@4.3.3:
 | 
			
		||||
  version "4.3.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
 | 
			
		||||
  integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    ms "2.1.2"
 | 
			
		||||
 | 
			
		||||
debug@^3.2.7:
 | 
			
		||||
  version "3.2.7"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
 | 
			
		||||
| 
						 | 
				
			
			@ -4673,14 +4680,13 @@ eslint-config-prettier@^8.3.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a"
 | 
			
		||||
  integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==
 | 
			
		||||
 | 
			
		||||
eslint-module-utils@2.7.1:
 | 
			
		||||
  version "2.7.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c"
 | 
			
		||||
  integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==
 | 
			
		||||
eslint-module-utils@2.7.3:
 | 
			
		||||
  version "2.7.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
 | 
			
		||||
  integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    debug "^3.2.7"
 | 
			
		||||
    find-up "^2.1.0"
 | 
			
		||||
    pkg-dir "^2.0.0"
 | 
			
		||||
 | 
			
		||||
eslint-plugin-playwright@^0.7.1:
 | 
			
		||||
  version "0.7.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -7797,6 +7803,13 @@ node-fetch@2.6.1:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
 | 
			
		||||
  integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
 | 
			
		||||
 | 
			
		||||
node-fetch@2.6.7:
 | 
			
		||||
  version "2.6.7"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
 | 
			
		||||
  integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    whatwg-url "^5.0.0"
 | 
			
		||||
 | 
			
		||||
node-fetch@^2.6.1:
 | 
			
		||||
  version "2.6.6"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
 | 
			
		||||
| 
						 | 
				
			
			@ -8472,13 +8485,6 @@ pixelmatch@^5.2.1:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    pngjs "^4.0.1"
 | 
			
		||||
 | 
			
		||||
pkg-dir@^2.0.0:
 | 
			
		||||
  version "2.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
 | 
			
		||||
  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    find-up "^2.1.0"
 | 
			
		||||
 | 
			
		||||
pkg-dir@^4.1.0, pkg-dir@^4.2.0:
 | 
			
		||||
  version "4.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
 | 
			
		||||
| 
						 | 
				
			
			@ -9471,10 +9477,10 @@ rollup-plugin-node-builtins@2.1.2:
 | 
			
		|||
    crypto-browserify "^3.11.0"
 | 
			
		||||
    process-es6 "^0.11.2"
 | 
			
		||||
 | 
			
		||||
rollup-plugin-polyfill-node@0.7.0:
 | 
			
		||||
  version "0.7.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.7.0.tgz#938e13278c98a582a4f8814975ddd26f90afddcc"
 | 
			
		||||
  integrity sha512-iJLZDfvxcQh3SpC0OiYlZG9ik26aRM29hiC2sARbAPXYunB8rzW8GtVaWuJgiCtX1hNAo/OaYvVXfPp15fMs7g==
 | 
			
		||||
rollup-plugin-polyfill-node@0.8.0:
 | 
			
		||||
  version "0.8.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.8.0.tgz#859c070822f5e38d221e5b4238cb34aa894c2b19"
 | 
			
		||||
  integrity sha512-C4UeKedOmOBkB3FgR+z/v9kzRwV1Q/H8xWs1u1+CNe4XOV6hINfOrcO+TredKxYvopCmr+WKUSNsFUnD1RLHgQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@rollup/plugin-inject" "^4.0.0"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -10500,17 +10506,17 @@ ts-node@^10.2.1:
 | 
			
		|||
    make-error "^1.1.1"
 | 
			
		||||
    yn "3.1.1"
 | 
			
		||||
 | 
			
		||||
tsdav@^1.1.5:
 | 
			
		||||
  version "1.1.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tsdav/-/tsdav-1.1.5.tgz#1d33baad2fdf81e5fb73565904cfa39cbd851e41"
 | 
			
		||||
  integrity sha512-4so4E7XZQ2Ahdz3QEdbkStcqfilUJYBcRq4ZhLr7Giy3KB9Ch+b7krQ8dqWeZoQJR/tXpb7knreoKuatIVLe2g==
 | 
			
		||||
tsdav@2.0.0-rc.3:
 | 
			
		||||
  version "2.0.0-rc.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tsdav/-/tsdav-2.0.0-rc.3.tgz#b8cef07079e69a65be4d1404c91a6dbd319fa5b0"
 | 
			
		||||
  integrity sha512-F6YxPB+dA5TP5KIr4NgfzQtPO7Pvf6XLwDjkpkWw6FhAdtshN97AVR+kP+DPcyUp2df3vMK9YS+XEOcpqwxCCw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    base-64 "1.0.0"
 | 
			
		||||
    cross-fetch "3.1.4"
 | 
			
		||||
    debug "4.3.2"
 | 
			
		||||
    eslint-module-utils "2.7.1"
 | 
			
		||||
    cross-fetch "3.1.5"
 | 
			
		||||
    debug "4.3.3"
 | 
			
		||||
    eslint-module-utils "2.7.3"
 | 
			
		||||
    rollup-plugin-node-builtins "2.1.2"
 | 
			
		||||
    rollup-plugin-polyfill-node "0.7.0"
 | 
			
		||||
    rollup-plugin-polyfill-node "0.8.0"
 | 
			
		||||
    xml-js "1.6.11"
 | 
			
		||||
 | 
			
		||||
tslib@2.0.1:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue